セキュリティ

社外レビュー前にlocalStorage内の個人情報を検出するチェックリスト

AIで生成したHTMLをクライアントや社外パートナーに送る前に、localStorageに個人情報が書き込まれていないかを確認する手順を整理しました。見落としがちなキー名のパターンや、ブラウザのDevToolsを使った素早い検出方法を含む実践的なチェックリストです。

なぜ危ないのか

AI生成HTMLはサンプルデータとして本名・メールアドレス・社員番号などをlocalStorageに書き込むコードを含む場合があります。ブラウザはドメインをまたいでlocalStorageを共有しないものの、プレビューURLを知る相手なら誰でもDevToolsから中身を丸ごと読み出せるため、「URLを教えた相手だけが見られる」という安心感は根拠がありません。

特にフォームのauto-fillや入力補完のためにlocalStorageを一時保管先として使うコードは、AIが意図せず生成しやすいパターンです。セッションをまたいでデータが残存し、レビュー終了後も削除されないまま放置されるリスクがあります。レビュー期間中に別の担当者がリンクを踏んだだけで情報が閲覧される可能性も否定できません。

  • 相手がログインなしで開ける状態か確認する
  • PCとスマホで最低1回ずつ表示を確認する
  • 内部情報・個人情報・不要な外部送信が残っていないか見る
  • レビュー期限と修正時の差し替え方を決めておく

ソースで見る場所

HTMLファイルをテキストエディタで開き、`localStorage.setItem` を全文検索してください。第一引数(キー名)とその値がどこから来るかを追います。変数経由で格納している場合は変数の初期値まで遡り、フォームのname属性値や定数文字列に個人情報のラベルが含まれていないか確認します。

次にブラウザのDevTools(F12)でApplicationタブを開き、Local Storageを選択します。ファイルをローカルで一度表示するだけでキーと値の一覧が確認できるので、name・email・phone・user_id・tokenなどの文字列が含まれるエントリを重点的にチェックしてください。値が空文字でも、キーが存在するだけで送信コードがある場合は漏えいの入口になります。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

安全に共有する設定

ギガサイト便を使う場合、HTMLアップロード前にlocalStorageの読み書きコードを削除またはコメントアウトするのが最も確実です。削除できない場合はストレージへの書き込み値をダミー文字列(例:`'REDACTED'`)に差し替え、実データが入らない状態にしてからアップロードします。

共有URLにはパスワードやメール認証を設定し、「URLを知っていれば誰でも閲覧可」の状態を避けましょう。有効期限を社外レビュー期間に合わせて設定することで、レビュー後に自動失効させられます。万が一URLが流出しても、認証がある状態なら第三者が中身にアクセスするハードルが大幅に上がります。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

再発防止ルール

AIへのプロンプトに「localStorageは使用禁止。入力値の保持が必要な場合はセッション変数のみ使い、サンプルデータは必ずダミー値にすること」と明記する習慣をつけると、生成段階での混入を大幅に減らせます。生成後のセルフレビューチェックリストに「localStorage.setItemの有無」を必須項目として加えてください。

チームで複数人がHTMLを生成・共有する場合は、共有前に別の担当者がDevTools確認を行うダブルチェック体制を設けます。Gitなどで管理している場合は`git grep 'localStorage'`をコミット前フックに組み込むと、コードレビューの前段階で機械的に検出できます。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

よくある質問

DevToolsのApplicationタブにlocalStorageのキーが表示されないときはどうすればよいですか?

ファイルをfile://で開いている場合、ブラウザによってはlocalStorageが機能しません。ローカルサーバー(`python -m http.server`など)経由で開くか、ギガサイト便にアップロードしてからDevToolsで確認してください。

localStorageの代わりにsessionStorageを使っていれば問題ありませんか?

sessionStorageはタブを閉じると消えますが、タブが開いている間は同じドメインのスクリプトから読み取れます。個人情報を格納しない点では同様の注意が必要です。共有前に値の内容を確認する手順は変わりません。

社外レビューが終わったあとlocalStorageのデータはどうやって削除できますか?

ギガサイト便の管理画面からURLを失効させるとファイル自体にアクセスできなくなります。閲覧者のブラウザ側に残ったデータは`localStorage.clear()`を実行するボタンをHTML内に用意するか、有効期限付きキーを実装して自動削除させる方法が有効です。

関連記事

「セキュリティ」の記事をもっと見る →