個人情報は「漏れない」より「持たない」PIIP プラグインの紹介:画像の位置情報削除もあるよ

個人情報は「漏れない」より「持たない」。PIIP プラグインの紹介:入る口でのマスク、写真の位置情報の削除、日本語対応

約 3,497 字 · 読むのに 6 分ほど

個人情報の漏洩対策というと、暗号化やアクセス制限を思い浮かべます。でも、その前にできることがあります。要らない個人情報を、最初から持たないことです。WordPress プラグイン PIIP を 1.8.0 に更新し、日本語にも対応しました。

漏れる前に、そもそも持たない

流出対策(暗号化、アクセス制限、ログの監視など)は、どれも「データを持っている」ことが前提です。持っているものは、いつか漏れる可能性があります。持っていなければ、漏れようがありません。

そして、サイトには「持つつもりがなかった」個人情報が意外と入り込みます。

  • 問い合わせフォームと間違えて、コメントや掲示板に名前・住所・電話番号を書き込む
  • エラーの相談で、パスワードや API キー入りの設定ファイルをそのまま貼る
  • スマートフォンで撮った写真をアップロードしたら、撮影場所の GPS 座標が付いていた

こうした情報は、サイトの運営に必要ありません。それでも、データベースや画像ファイルに入ってしまえば、守るべきデータになります。そこで、持つべきデータを最小にして、要らない個人情報が入り込まないようにする。漏洩を防ぐ考え方として、流出対策より先にこちらがあります。PIIP は、この考え方を WordPress で実現するためのプラグインです。

PIIP とは

PIIP – PII Protection は、コメントやフォーラムなどに書き込まれた個人情報(PII)を、データベースに保存する前に自動でマスクするプラグインです。

  • 処理はすべて自分のサーバーの中で行い、外部のサービスには送らない
  • マスクする前の値はどこにも保存しない
  • 対応している入口:WordPress のコメント(コメントフォーム、REST API、後からの編集)、ユーザープロフィール、Contact Form 7、wpForo、BuddyPress、bbPress
  • 動作環境:WordPress 6.9 以上、PHP 8.2 以上

特徴 1:入る口でマスクする

PIIP は、書き込みが保存される瞬間に中身を調べ、個人情報だけを伏せ字にしてから保存します。表示のときに隠すのではなく、保存されるデータそのものから取り除きます。

試しに、ログインしていない読者として、問い合わせのつもりのコメントを送ってみました(WordPress 7.0、PIIP 1.8.0)。

書き込んだ内容データベースに保存された内容
お名前:山田 太郎お名前:山* 太*
住所:東京都渋谷区神宮前1-2-3住所:東京都***
電話番号:090-1234-5678(全角)電話番号:***-***-5678
メール:taro.yamada@example.jpメール:t***@example.jp
問い合わせのつもりで書かれたコメントが、保存前にマスクされた管理画面
管理画面のコメント一覧。本文の個人情報は保存前にマスクされている

コメントの名前欄とメール欄は、返信に使うのでそのまま残します。マスクするのは本文に書き込まれた分です。

ほかにも、次のようなものを見つけます。

  • メールアドレス、電話番号(携帯・固定・0120・0570・03(1234)5678 などの形)、住所と郵便番号
  • クレジットカード番号(Luhn の検査で本物の番号だけ。注文番号や JAN コードは誤ってマスクしない)、マイナンバー
  • 「お名前:」「住所:」「会員番号:」などのラベル付きの連絡先、パスポートや運転免許証などの番号
  • パスワード、API キー、設定ファイルの秘密情報(DB_PASSWORD など)、秘密鍵
  • 全角で入力された数字・記号(マスクしない部分は元の全角のまま)

どうマスクされるかは、PIIマスク チェッカーでその場で試せます。PIIP と同じ処理をブラウザの中で動かしているので、入力した内容はどこにも送られません。

PIIマスク チェッカーで問い合わせ文の例をマスクしたところ
PIIマスク チェッカー(例文「問い合わせ文」)

個人情報をあえて公開したい投稿のために、「同意フレーズ」も用意しています。投稿にこのフレーズが含まれていれば、その投稿はマスクしません。

特徴 2:アップロード画像の位置情報を消す(1.8.0)

スマートフォンで撮った写真には、ふつう撮影場所の GPS 座標が記録されています。WordPress は、アップロードされた元画像をその情報ごと保存します。画像の処理に ImageMagick を使うサーバーでは、縮小したすべての画像にも残ります。自宅で撮った写真を載せると、自宅の場所を公開しているのと同じことになりかねません。

PIIP 1.8.0 は、アップロードの時点でこの情報を消します。GPS 座標と撮影者・所有者・シリアル番号を入れた写真で試した結果です(WordPress 7.0、ImageMagick)。

保存されたファイルGPS 座標撮影者・所有者シリアル番号機種・撮影日時
PIIP なし・元画像残る残る残る残る
PIIP なし・縮小画像残る残る残る残る
PIIP あり・元画像消える消える消える残る
PIIP あり・縮小画像消える消える消える残る
  • 画像は再圧縮しません。ファイルの大きさも画素も元のままで、該当する部分だけを消します
  • 画像の向き、カラープロファイル、カメラの機種、撮影日時は残します
  • REST API で公開されるメディアのデータにも、撮影者の名前を含めません
  • 対応形式:JPEG、WebP、PNG、HEIC/AVIF
  • すでにアップロード済みの画像は、「ツール」→「PII スキャン」で探して消せます
PIIP の設定画面のアップロード画像の項目
「設定」→「PII Protection」の「アップロード画像」。どちらも初期設定でオン

そのほかの更新(1.7.0・1.8.0)

  • マスクするコメントの種類を選べる(コメント、商品レビュー、ブロックエディターのノート、そのほか)
  • コメント投稿者の IP アドレスを匿名化できる(192.0.2.123 → 192.0.2.0)
  • REST API で作られたコメントや、後から編集されたコメントもマスクする
  • Abilities API に対応。MCP クライアントや AI エージェントから、生の個人情報を受け取らずにマスクや点検ができる
  • セキュリティの修正(特定の連携で、HTML を書き換えられるおそれがあった問題)

すべての変更は WordPress.org の変更履歴で確認できます。ソースは GitHub で公開しています。

日本語で使えるようになりました

プラグイン本体と説明文の日本語訳が、translate.wordpress.org でともに 100% になりました。言語パックも配信されているので、サイトの言語が日本語なら、インストールするだけで設定画面が日本語で表示されます。上の設定画面の画像も、言語パックを入れただけの状態です。

使い方

  1. 管理画面の「プラグイン」→「新規追加」で「PIIP」を検索し、インストールして有効化する
  2. 「設定」→「PII Protection」で、マスクする入口と個人情報の種類を選ぶ(初期設定のままでも使えます)
  3. 「マスクのプレビュー」で、自分のサイトに書き込まれそうな文を試す
  4. すでに保存されているコメントや画像は、「ツール」→「PII スキャン」で確認してから適用する

気をつけること

  • PIIP は技術的な道具です。入れるだけで個人情報保護法や GDPR に適合するわけではありません
  • 自動の検出なので、見逃しや、マスクしすぎることがあります。プレビューで自分のサイトの書き込みに合うか確かめてください
  • マスクした元の値は残らないので、あとから元に戻すことはできません

まとめ

  • 漏洩を防ぐには、流出対策より先に「要らない個人情報を持たない」ことができる
  • PIIP は、コメントやフォーラムの書き込みを保存前にマスクする(入る口でのマスク)
  • 1.8.0 で、アップロード画像の位置情報と撮影者などの情報を、再圧縮せずに消せるようになった
  • 日本語訳が 100% になり、言語パックで日本語の画面で使える