情シスのいない中小の会社で、Web サイトの個人情報のリスクを調べていた。会社のサイトの公開フォルダに、以前フォームを差し替えたときの退避フォルダが残っていた。中には旧問い合わせフォームの控え(個人情報の入った CSV)があった。URL さえ分かれば、誰でも認証なしでダウンロードできる状態だった。同じ調査で、サイトを丸ごと固めたバックアップ(.wpress)も 39 個、同じように取れる場所に見つかった。大半は、使っていない旧サイトの分だ。
消すかどうかは、サイトの持ち主が決めることだ。その判断を待たず、見つけた日のうちに外から取れないよう止めた。ただし消してはいない。中身も変えていない。漏えいがあったとも、なかったとも言っていない。
個人情報が外から取れると分かったとき、情シスが決めてよいのは「止める」までだ。漏えいに当たるか、どこに報告するかは会社が決める。この記事は、片付けが終わる前の時点で、なぜ調べたか、何が見つかったか、どうやって止めたかを書く。
この記事でわかること
- ▶ 公開フォルダで見つかったもの。バックアップのプラグインの「一覧を隠す」は「取れなくする」ではなかった
- ▶ 消す判断を待たずに止めてよいと判断した 4 つの条件と、消さなかった理由
- ▶ 止め方(ハッシュ・権限・403 と 200 の確認)と、取られたかをどこまで確かめられたか
- ▶ 報告で「分からない」と「判断してほしい」をどう分けたか。自社で確かめるなら何を頼むか
▼なぜ調べたか:PHP の確認を頼まれたが、危ないのは「使っていないのに残っているもの」だった
きっかけは、レンタルサーバーの PHP の脆弱性だった。社内から「うちは大丈夫か」と相談があり、サーバー事業者が修正を当て終えていることを公式の告知で確かめた。その後、監査の担当が音頭を取り、サイトの持ち主のマーケ部門から、サイトごとの回答リストを埋めてほしいと頼まれた。ホスティング、PHP と WordPress の版、管理画面の問題、閉鎖の予定を書く表だ。
根っこの問いは「ホスティング業者に任せておけば大丈夫か」だった。答えは「半分だけ」になる。業者が直せるのは PHP 本体までだ。その上で動いているサイトと、サーバーに残っているファイルは会社の持ち物で、誰も見ていなければ誰も直さない。実際、調べていくと、使っていないのに公開されたままのサイトが見つかった。
「PHP が古い」より「使っていないのに残っている」の方が危ない。PHP の版は業者と計画を立てて上げられる。使っていないサイトやファイルは持ち主がいないので、誰も気づかない。
▼なにが見つかったか:サイトの横の公開フォルダに、問い合わせの控えとサイト丸ごとのバックアップ
危なかったのは、サイトそのものより、サイトの横に置かれたファイルだった。使っていないのに残っていたのはサイトだけではない。今のサイトの中にも、退避したまま忘れられたファイルがあった。
| 見つかったもの | 中身の種類 | 外から取れたか |
|---|---|---|
| 旧問い合わせフォームの控え(CSV) | 受付日時、氏名(漢字・カナ)、電話番号、メールアドレス、問い合わせ内容 | 取れる状態だった。外から HEAD で 200 が返った(ダウンロードはしていない) |
| サイト丸ごとのバックアップ(.wpress)39 個、3 か所(大半は使っていない旧サイトの分) | サイトのファイルとデータベース一式 | 取れる状態だった。ファイル名を指定すると 200 が返った |
控えは、以前に問い合わせフォームを差し替えたとき、旧フォーム一式と一緒に公開フォルダに退避されたまま残っていたものだ。外からは HEAD(中身を受け取らず、応答だけ確かめる要求)を送り、ダウンロードできる状態かを確かめた。サーバーの中では、控えの見出しの行(項目名)と行数だけを見た。個人の行は開いていない。
バックアップの方も軽くはない。データベースが丸ごと入っている。現行サイトの分には、管理ユーザーのパスワードのハッシュや、フォームの設定によっては問い合わせの中身も入り得る。旧サイトの分に個人情報があるかは、中を見ていないので分からない。「個人情報は CSV で、バックアップはその次」とは考えなかった。
ブラウザでは見えない。サーバーの中を一覧で見て初めて分かった
どちらも、サイト内からのリンクはなく、検索しても出てこない。ブラウザでサイトを見て回っても、まず気づかない。
見つけたのは、調査を任せていた AI エージェント(Claude)だ。サーバーの中を見るために、自分の OK で調査用の SSH の鍵を 1 本だけ登録し、読み取りのコマンドだけを打たせていた(鍵は調べ終わったあとに外した)。公開フォルダの一覧を見ているときに、それらしい名前のフォルダが目に入った。外から HEAD を送ると 200 が返り、取れる状態だと分かった。そこで手を止めて、こちらに判断を求めてきた。そのあと公開フォルダ全体を探して、バックアップ 39 個も見つけた。
バックアップのプラグインの「一覧を隠す」は「取れなくする」ではなかった
39 個のバックアップは、All-in-One WP Migration が作ったものだ。このプラグインはバックアップの置き場に .htaccess や index.php を置く。だから「プラグインが守っている」と思いがちだ。
実際は、守っているのはフォルダの一覧表示だけだった。この環境では、フォルダを開いても一覧は出ないが、ファイル名を指定すれば 200 が返った。公式リポジトリにある現行版のソースを見ても、バックアップの置き場の .htaccess は一覧表示を止める指定だけで、アクセスを拒否する指定はない(旧サイトで使っていた版の中身までは確かめていない)。
ファイル名の末尾にはランダムな文字列が入るので、名前を知らない人が当てるのは難しい。ただ、それは「名前が推測しにくい」であって、「取れない」ではない。名前がどこかから漏れれば、そのまま取れる。
同じ調査で、別のサイトでは、別のバックアップのプラグインの置き場が外から 403 で、取れなかった。バックアップが「あるか」と、外から「取れるか」は別に見る必要がある。1 つずつ確かめるしかない。
▼分かれ目:消す判断を待たずに、その日のうちに止めた
ファイルを消す、サイトを閉じるには、持ち主の了承が要る。消す前にデータを退避する手間もある。どうしても日数がかかる。一方で、個人情報が外から取れる状態は、1 日でも短い方がいい。
そこで「取れなくする」と「消す」を分けた。戻せて中身を変えない「取れなくする」だけを、その日のうちにやった。
| 取れなくする(先にやった) | 消す・閉じる(持ち主が決める) | |
|---|---|---|
| やること | ファイルとフォルダの権限を変え、外から 403 にする | データを退避して、サイトとファイルを消す |
| 戻せるか | 戻せる(権限を元に戻すだけ) | 戻せない |
| 中身・証拠 | 変わらない | なくなる |
| 誰が決めるか | 情シス(自分)が決めて、後で伝える | サイトの持ち主 |
| いつ | 見つけた日 | 了承の後 |
控えは、AI エージェントが手を止めて判断を求めてきた数分後に、自分が OK を出して止めた。バックアップ 39 個も同じ考えで、その約 10 分後に止めた。バックアップの方は、名前が推測しにくいので取られた可能性は低いと見た。それでも止めるコストが小さいので、待つ理由がなかった。
先に止めてよい 4 つの条件
この調査は「サイトとファイルには触らず、読むだけ」と決めて始めていた。SSH を使えるようにしたのは、その読むための入口の変更で、これも自分が OK を出した。止めるのは、その線を越えてファイルの設定を変えることだった。越えてよいと判断した条件は 4 つある。
- 個人情報が、今まさに外から取れる(取れることを実際に確かめた)
- 戻せる(元の権限に戻せば、元どおりになる)
- 中身と証拠を変えない(ファイルの中身も更新日時も触らない)
- 止めたことと、分かっていないことを、持ち主と判断する人に伝える(黙って変えたままにしない。今回は止めた日のうちに報告を送った)
正直に書くと、止める前に先方の誰かに一言入れてはいない。外部の支援者が、持ち主に断らずにサーバーの設定を変えた。その代わりに、上の 4 つで担保した。断りを入れている間も取れる状態が続くので、先に止めて、後で全部を伝える方を選んだ。4 つ目の「伝える」は、止めたその日のうちに報告をまとめて送った。
社内の兼任の担当者なら、止める前に一言入れる相手ははっきりしている。サイトの持ち主(マーケ部門など)か、個人情報の責任者(管理部門の責任者など)だ。チャットで「外から取れる個人情報のファイルを見つけた。戻せる形で今から止める」と 1 行送るだけでいい。返事を待たずに止めてかまわない。
使っていないサイトは期限を決めて待ち、控えは待たなかった理由
同じ日、控えを見つける前に、使っていないサイトについては持ち主に閉鎖の可否を聞いていた。あわせて「削除の前に、まずアクセス制限を掛ける」と期限を決めて伝えていた。
この期限は予防のためのものだ。その時点で、何かが外に出ていると分かっていたわけではない。サイトごと塞ぐと影響の範囲も広いので、持ち主の返事を待つ余地があった。
控えは違った。個人情報が実際に外から取れると、この目で確かめた。起きるかもしれないことには期限を決めて待ち、もう起きている状態は待たない。線を引いたのはそこだ。
消さなかった理由
「見つけたなら消せばいい」と思うかもしれない。消さなかった理由は 2 つある。
- ▶ 後から調べる材料が消える:取られたかどうか、何件あったかを後で確かめるには、ファイルがそのまま残っている必要がある
- ▶ 消すかどうかは会社が決めること:情シスが決めてよいのは、戻せる範囲で止めるところまで
▼どうやって止めたか:ハッシュを取り、権限で塞ぎ、外から 403 と 200 を確かめる
止め方は、一番小さくて戻せるものを選んだ。手順は次のとおり。
- 止める前に、ファイルのハッシュ(SHA-256)を記録した。後で「中身を変えていない」と言えるようにするためだ
- フォルダとファイルの権限から、所有者以外の読み取りを外した。中身と更新日時は変えていない。
.htaccessで遮断する案もあったが、権限の方が対象を絞れて戻しやすいので権限にした。あとで確かめると、このプラグインには管理画面を開くたびに置き場の.htaccessを作り直す処理があった(現行版のソース)。バックアップの置き場では、.htaccessに書き足した遮断が消える可能性もある - 外から確かめた:CSV、フォルダ、旧フォームの PHP など、そのフォルダの中はすべて 403 になった
- 壊れていないことも確かめた:本番サイトのトップと、今使っている問い合わせページは 200 のまま
- 戻し方を作業記録に書いた:元の権限の値と、戻すコマンド
バックアップ 39 個も同じ手順で止めた(権限の変更、403 の確認、各サイトのトップと問い合わせページが 200 のままかの確認)。
この環境で使った形は次のとおり(パスとドメインはダミー)。
ただし、権限で塞いで 403 になるかはサーバーの作りで変わる。Web サーバーがどのユーザーで動いているか次第だ。環境によっては効かないし、逆に本番まで止めてしまうこともある。だから止めた後に、両側を外から確かめる。
止めた後に見るのは 2 つ。「外から取れない」と「本番が動いている」。片方だけだと、止め損ねにも、止めすぎにも気づけない。
▼取られたかは分かるか:見られたアクセスログは当日分だけだった
止めた後に一番聞かれるのは「で、取られたのか」だ。答えは「分からない」だった。
| 見たもの | 分かったこと | 分からないこと |
|---|---|---|
| アクセスログ | 当日分では、控えのフォルダへのアクセスはこちらの確認(HEAD)だけだった | それより前。サーバーの中のログの保存先は空で、取り出せたのは当日分だけ。管理画面に過去の分が残っているかは、まだ確かめていない |
| 検索エンジン | 検索しても出てこない | インデックスされていない証明にはならない |
| サイト内のリンク | 控えへのリンクはない | URL を別の経路で知った人がいたか |
言えるのは「偶然見つかる可能性は低い」までだ。「取られていない」とは言えない。「何も見つからなかった」と「取られていない」は違う。
この違いは、会社の判断にそのまま効く。個人情報保護委員会の Q&A は、ネット上で閲覧できる状態になっていたケースを扱っている。閲覧できなくするまでの間に第三者が見ていないことをアクセスログなどで確かめられれば、漏えいには当たらない。確かめられなければ、漏えい(またはそのおそれ)に当たり得る、という整理だ(個人情報保護委員会 Q&A Q6-1)。今回は、まさにログで確かめられない側にいる。
アクセスログは、いざというときにしか読まないが、平時にしか残せない
レンタルサーバーのアクセスログの保存期間は、事業者や設定でかなり違う。管理画面で見られるのは 1 か月ほど、長く残す設定にすれば最大 2 年、というくらいの幅がある。既定のままだと短いことも多い。今回は、サーバーの中のログの保存先が空で、手元で見られたのは当日分だけだった。だから今のところ「分からない」としか言えない。保存期間を延ばす設定や、ログを外に残す仕組みは、何も起きていないうちに決めておく。
▼報告:「分かったこと」「分からないこと」「判断してほしいこと」を分ける
漏えい「のおそれ」に当たるか。個人情報保護委員会に報告するか。本人に通知するか。これを決めるのは会社だ。情シスの仕事は、判断の材料を、分かったことと分からないことに分けて渡すところまでになる。
報告は、止めたその日のうちに次の組み立てでまとめて送った。
- ▶ 見つかったもの:何のファイルか、項目の種類
- ▶ 状態:URL が分かれば誰でも取れた。いつ頃からその状態だったと考えられるか
- ▶ やったこと:外から取れないようにした。消していない。本番サイトと今の問い合わせフォームに影響はない
- ▶ 分かっていないこと:第三者が取ったかどうか(当日より前のログを確かめられていない)、含まれる件数(行数は見たが、問い合わせ内容の改行を含むので件数にはならない。件数は数えていない)
- ▶ 判断してほしいこと:個人情報保護法上の対応(委員会への報告、本人への通知)の要否
- ▶ 判断の材料として、こちらでできること:中身を見ずに件数だけ数える、サーバー事業者に過去のアクセス記録を照会する
- ▶ あわせての報告:バックアップ 39 個も同じように止めたこと。古いものを消してよいかは別に相談する
気をつけたことは 3 つある。
1 つ目は宛先だ。IT の相談をふだん受けている、全員が見るチャンネルには書かない。宛先は管理部門の責任者と監査の担当に絞り、メールか宛先を絞ったチャットにした。
2 つ目は、楽観にも悲観にも寄せないことだ。「偶然見つかる可能性は低い」と書くなら、その根拠(リンクがない、検索に出ない)と限界(取られていない証明にはならない)を並べる。「漏えいしました」とも「漏えいはありません」とも書かない。
3 つ目は、会社が判断に使う物差しを添えることだ。委員会への報告が義務になるのは、次のどれかに当たる場合だ。要配慮個人情報(病歴など、扱いに特に配慮が要る情報)が含まれる。不正に使われて財産的な被害が出るおそれがある。不正の目的で行われたおそれがある。本人の数が 1,000 人を超える。どれも「おそれ」を含む。件数がまだ分からなくても、1,000 人を超えた可能性があれば対象になり得る。期限は、速報が発覚から速やかに(概ね 3〜5 日以内)、確報が発覚から 30 日以内(不正の目的のおそれがある場合は 60 日以内)だ(個人情報保護委員会「漏えい等の対応とお役立ち資料」)。件数を数える作業を申し出たのは、このためだ。当てはめて決めるのは会社で、情シスではない。
▼自社で確かめるなら:サーバーの中を見たことがない人が、まず頼むこと
自分でサーバーに入れなくていい。サーバーの契約者か制作会社に、何を出してもらい、何を確かめてもらうかを決めれば足りる。
- 公開フォルダの一覧を出してもらう。サイトのファイルが置かれている場所の、フォルダとファイルの名前の一覧だ
- 怪しい名前を探す。backup・bk・old・日付が付いたフォルダや、.csv・.sql・.zip・.wpress のファイル。サイトのリニューアルやフォームの差し替えのときに、退避したまま残りやすい
- 見つけたものが外から取れるかを、1 つずつ確かめてもらう。一覧が隠れていても、ファイル名を指定すると取れることがある
- 取れたら、消さずに止めて、判断する人に渡す。上の 4 つの条件のとおりに
契約者・制作会社に送る依頼の中身(そのまま使える形)
- ▶ 各サイトの公開フォルダの、フォルダとファイルの一覧
- ▶ その中のバックアップ・退避・旧フォームのファイルが、外から URL で取れるかの確認結果
- ▶ 取れるものがあった場合は、消さずにまず連絡してほしいこと
- ▶ アクセスログを何日分残しているか
▼まとめ
- ▶ 業者が直せるのはサーバーまで。使っていないのに残っているサイトとファイルは、会社が見ないと誰も見ない
- ▶ 危ないのはサイトの横に置かれたファイル。ブラウザでは見えない。バックアップのプラグインの「一覧を隠す」は「取れなくする」ではなかった
- ▶ 個人情報が外から取れると分かったら、消す判断を待たずに「取れなくする」だけ先にやる。条件は、今取れる・戻せる・中身を変えない・伝える
- ▶ 止める前にハッシュを取る。止めた後は「外から取れない」と「本番が動いている」の両方を確かめる。戻し方を記録しておく
- ▶ 取られたかは、残っているログの範囲でしか言えない。漏えいの有無も、法上の判断も会社に渡す
この記事を書いている時点で終わっているのは、止めたこと、止まったことの確認、報告まで(送付済み)だ。法上の判断、使っていないサイトの閉鎖、古いバックアップの扱いは、まだ終わっていない。
📅 30分無料相談、受け付けています
「使っていないサイトやサーバーに何が残っているか、誰も把握していない」——そういった段階からお気軽にどうぞ。何をどこに頼めば確かめられるかの整理から、見つかったときの止め方・報告のまとめ方まで一緒に考えます。
📅 30分無料相談を予約する →