WordPressのEWWWプラグインでEXIF情報が消えない場合が!その写真には個人情報が残っているかも?

2020年9月24日お知らせと雑記

スマホやデジカメで撮った写真にはいろいろな個人情報が入っています。

それはEXIF情報と言って、日時・機種名・撮影時のGPS情報(位置情報)などがあります。

とくに位置情報は個人ブログなら消しておきたい情報ですね💦

WordPressプラグインで画像のEXIF情報を削除するならEWWW Image Optimizer

…と、グーグルで検索すると真っ先に出てきます。

実際、ブログ主もいくつかの画像処理プラグインを比較してみましたが、確かにEWWW Image Optimizerが一番使い勝手が良かったです。

EWWWを入れておけば安心❗

これはその通りです。ぜひEWWWをインストールしましょう

なお、設定上の注意点が2点ほどありますので、ここで紹介しておきます。

EWWWのメタデータ削除機能でEXIF情報は消せる
EWWWのメタデータ削除機能でEXIF情報を消せる
忘れがちな上級者設定内にあるこの設定も必ずチェック

上記2つのチェックは必ず有効にしておきましょう。これでひとまず安心です。

しかし。

EWWW Image OptimizerではEXIF情報が消えないパターンが存在するのです❗

これはワードプレスをお使いのみなさんに強く警告しておきたいので、あえて記事にしました。

なお、以下の記述はすべて無料版のEWWW Image Optimizerが対象となります。

写真からEXIF情報が削除されないのはこんな時

EWWWの変換結果一覧表でEXIF情報が判定できる
EWWWの変換結果一覧表でEXIF情報が判定できる

メディアライブラリの「画像最適化」欄から見ることのできる変換結果一覧表(上記画像)で「節約なし」となっている場合、EXIF削除は行われていません。

この一覧で「Full(元画像)」が「節約なし」になっていたらアウトです。

それでは、どういう場合にEXIF情報が残ってしまうのでしょうか?

それは、すでに何らかのアプリで最適化を施している画像をアップロードした場合です。

すでに最適化されたJPEG画像ファイルは(それ以上は圧縮できないため)EWWWに「最適化不要」と判断されて処理をスキップされてしまうのです。

無料版のEWWW Image Optimizerは圧縮率が低めです。そのため他のJPEG最適化ツールにかけたファイルではこの現象が起きやすいと考えてください。

Instagramアプリの写真にはご注意

ブログ主の場合は【Instagramアプリがスマホ内に保存した画像】で問題が起きました。

これは「位置情報を残しながら最適化をかけている」という特殊な画像です。

そのためEWWW Image Optimizerの画像処理をスキップしてアップロードされてしまうのです。

インスタグラム用の画像は綺麗に補正されているのでWordPressにも流用しよう…と気軽にWordPressへアップしてしまうと発生する問題というわけですね。

EWWW Image Optimizerの問題への一般的な対処方法

EWWWプラグインをインストール済みという前提でのお話です。

画像効果やトリミングなどを行う画像処理アプリがこの問題の要因。

よって「スマホの標準カメラやデジカメで撮影したばかりの素の写真のみを利用する」というのが最も簡単な対処法だと思います。

アプリで処理した写真を使う場合には、冒頭の変換結果一覧表をチェックするようにして下さい。

そもそも、デジカメやスマホを位置情報を記録しない設定にしておくというのも賢い対策かと思います。

EWWW Image Optimizerの問題への特殊な対処方法

ここから下は、いずれも特殊な処理をfunction.phpに記述する方法です。

この対処は自己責任でお願いします。なにか問題が起きてもブログ主は責任は持てません❗

処理パターンA

EWWW Image Optimizer内蔵のjpegtranを使うパターンです。

本来のjpegtran処理の前にあらかじめEXIF情報削除のみのjpegtran処理を走らせるというものです。

これには画像変換が2度走ってしまうという問題がありますが、おそらくどんな環境でも利用できるでしょう。

// EWWW: Force exif removing.
add_action('ewww_image_optimizer_pre_optimization', function ($file, $type, $original_image) {
    if ($type !== 'image/jpeg' or !$original_image) {
        return;
    }

    if (
        !function_exists('ewww_image_optimizer_path_check')
        or
        !function_exists('ewww_image_optimizer_find_nix_binary')
        or
        !function_exists('ewww_image_optimizer_escapeshellarg')
    ) {
        trigger_error("[ewww_image_optimizer_pre_optimization] Expected function is none.", E_USER_WARNING);
    }

    $tools = ewww_image_optimizer_path_check();
    $nice = ewww_image_optimizer_find_nix_binary('nice', 'n');

    if (!isset($tools['JPEGTRAN'])) {
        trigger_error("[ewww_image_optimizer_pre_optimization] JPEGTRAN is none.", E_USER_WARNING);
    }

    exec("$nice " . $tools['JPEGTRAN'] . " -copy none -outfile " . ewww_image_optimizer_escapeshellarg($file) . ' ' . ewww_image_optimizer_escapeshellarg($file));
}, 10, 3);

処理パターンB

別途ExifToolを使ってEXIF情報のみを削除するパターンです。

あらかじめサーバ内にexiftoolをインストールしておく必要があります。

これだと画像に対する副作用がないので、ブログ主はこちらを採用しています。

// EWWW: Force exif removing.
add_action('ewww_image_optimizer_pre_optimization', function ($file, $type, $original_image) {
    if ($type !== 'image/jpeg' or !$original_image) {
        return;
    }

    $EXIF_TOOL = '/path/to/exiftool';
    exec("$EXIF_TOOL -overwrite_original -all= " . escapeshellarg($file));
}, 10, 3);

ワードプレスの画像に個人情報が残っているか一括調査

すでにアップロードされた写真にEXIF情報が残っているかを一括で調べる簡単な方法はありません。

以下の方法は危険を伴います。これも自己責任でお願いします。

この作業にはWP Data Accessのようなデータベースを直接閲覧することのできるプラグインを使います。

「wp_ewwwio_images」テーブルが「最適化の履歴」の情報です。

これの「results」カラムの内容が「節約なし」になっている画像にEXIF情報が残っている可能性があるわけです。

このレコードを削除することで、最適化処理を再び実行することができます。

対策処理を入れていなければ同じ結果になるだけですが…。

レコード削除作業はEWWW Image Optimizerの「最適化の履歴」画面で行うのが安全でしょう(履歴削除機能があります)。

技術者の方ならワードプレスの管理画面ではなくサーバ内にログインしてfindやidentifyコマンドでサクッと探してしまうのが早いと思います。

ワードプレスのEWWWプラグインで問題が発生する原理

これは技術者向けの内部的な話なので、読み飛ばしていただいても結構です。

EXIF情報が関係するのはJPEGだけですので、ここではその話に絞って記述します。

WordPressに画像をアップロードすると、EWWW Image Optimizerは以下のような動きをします。

  1. 「最適化の履歴」になければ処理を続ける。
  2. jpegtranツールで画像処理する(このときEXIF情報も除去される)。
  3. 処理した結果画像サイズが減れば画像を上書き保存する。
  4. 「最適化の履歴」に保存する。

問題は「3. 処理した結果画像サイズが減れば保存する」で発生します。

画像サイズが減らなかった場合、上書き保存処理が行われないため、EXIF情報も除去されないわけです。

WordPressの写真に残った個人情報にはご注意

EXIF情報を削除するにはEWWW Image Optimizerを入れておけば万事OKだと思っていました。

なので、サーバ内のファイルをなんとなく検索していたときに位置情報が残っていたのにはびびりました…😅

同カテゴリにはSmushという画像最適化プラグインもあるのですが、これはそもそもオリジナル画像を処理しない仕様なので対策しようがありません。

同様にShortPixel Image Optimizerプラグインも試してみたのですが、無料だと制限が多くて厳しそう。

やはり、EWWWがよく使われる理由もよくわかりますので、この問題は対処しておきたいところです。

それではみなさんご安全に、WordPressで個人ブログライフをお過ごしください✨