なぜ危ないのか
AIにURLパラメータを処理するコードを生成させると、`?token=xxxxxxxx`の値をJavaScript変数に代入してそのまま別のAPIコールに使う実装が生まれやすいです。開発中に実際のトークン値をURLに入れてテストした場合、その値がソースのコメントやconsole.logに残存することがあります。
URLクエリはブラウザの履歴・サーバーのアクセスログ・リファラヘッダーに記録されます。HTMLをプレビューURLで共有した瞬間、その履歴を持つ端末からトークンが漏えいするリスクがあります。JWTやAPIキーがクエリに含まれていた場合、第三者によるなりすましや不正アクセスに直結します。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
ソースで見る場所
HTMLファイルを開き`URLSearchParams`・`location.search`・`location.href`を全文検索します。これらが使われている箇所でクエリ値をどう扱っているか追跡します。特に`fetch()`や`XMLHttpRequest`の引数に渡されている場合、外部サーバーへトークンが送信される経路になっていないか確認してください。
コメント行にも注意が必要です。`// token=abc123`のような形でテスト用の値が残っている事例があります。`grep -in 'token\|apikey\|api_key\|bearer' output.html`で大文字小文字を区別せず検索すると見落としを防げます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
安全に共有する設定
クエリトークンが機能上必要な場合は、ギガサイト便のURL共有前にトークンを無効化または別の値に差し替えます。デモ用のダミートークン(例:`demo-preview-token-2024`)を使い、実環境の認証情報が入らないようにします。
ギガサイト便のアクセス制限(パスワード・メール認証)をかけた上で、共有URL自体にトークンを含めない設計にします。レビュー担当者が特定の認証を通過した後にのみコンテンツを表示する仕組みにすることで、URLの流出がそのままトークン漏えいにならない構成にできます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
再発防止ルール
AIへのプロンプトで「URLクエリパラメータにトークン・APIキー・認証情報を渡す実装は行わないこと。認証が必要な場合はリクエストヘッダーまたはPOSTボディを使うこと」と指定します。この指示でAIが生成するコードからクエリトークンのパターンを排除できます。
CI/CDや共有前レビューで`location.search.*token`のような正規表現をgrepするステップを設けます。さらにHTMLをバージョン管理している場合は、コミット前フックで検出し、問題があればコミットをブロックする仕組みを作ると継続的に防止できます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
よくある質問
URLのクエリパラメータはHTTPSなら安全ではないのですか?
通信経路はHTTPSで暗号化されますが、ブラウザ履歴・アクセスログ・リファラヘッダーにはプレーンテキストで記録されます。サーバーログが漏えいした場合にトークンも同時に流出するため、クエリへの機密情報の埋め込みは避けるべきです。
クエリトークンを削除したらHTMLが動かなくなりました。どうすればよいですか?
トークンが機能の核心にある場合は、ダミー値で動作するモックモードを実装してください。本番トークンなしで見た目を確認できる状態にしてからレビュー用に共有するのが安全な進め方です。
コメントに残ったトークンの文字列も問題になりますか?
HTMLのコメントはブラウザのDevToolsや`view-source:`で誰でも閲覧できます。コメント内のトークンも本物であれば同様のリスクです。公開前にコメントを全て削除するか、ダミー値に置き換えてください。