なぜ危ないのか
URLのクエリ文字列はブラウザのアドレスバーに表示されるため、画面共有・スクリーンショット・物理的な覗き見によって漏えいします。さらにHTTPリファラヘッダーに含まれるため、HTML内に外部リソース(画像・フォント・アナリティクスタグ)が1つでもあれば、そのサーバーのアクセスログにトークンが記録されます。
JWTのような署名付きトークンは有効期限内であれば第三者がそのまま使えます。APIキーであれば課金やデータ操作に悪用されます。プレビューURLを送付した相手が善意であっても、その相手の端末からさらにURLが転送されるリスクを制御できません。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
ソースで見る場所
共有前にHTMLをブラウザで開き、アドレスバーのURLを確認します。`?`以降にtoken・key・auth・session・idといった文字列が含まれていたら要注意です。次にDevToolsのNetworkタブでページ読み込み時のリクエストを全件確認し、クエリパラメータにトークンが付いたリクエストが外部ドメインに飛んでいないか見ます。
ソースコード内では`window.location.search`や`new URL(window.location.href).searchParams`を使ってクエリを取得している箇所を探します。取得した値を`fetch`のURLに直接文字列連結している実装は、外部へのトークン送信経路として特に危険です。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
安全に共有する設定
トークンをURLクエリから除去し、代わりにギガサイト便のパスワード認証だけでアクセス制御する構成に変更します。レビュアーにとって必要なのはコンテンツの確認であり、実際の認証トークンは不要なはずです。レビュー専用のダミーデータで動作する版を別途用意するのが理想です。
どうしてもトークンが必要な場合は短命トークン(有効期限を数時間に設定)を発行し、レビュー後すぐに失効させます。ギガサイト便の有効期限とトークンの有効期限を同期させることで、期限切れ後は二重にアクセスできない状態を作れます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
再発防止ルール
社内のHTMLレビューガイドラインに「URLクエリに機密情報を含めない」を明記し、AIでHTML生成する際のプロンプトテンプレートにも同じ制約を入れます。プロンプトテンプレートを共有ドキュメントで管理することで、チーム全体の生成品質を揃えられます。
月に一度、過去に共有したプレビューURLをギガサイト便の管理画面で棚卸しし、不要になったURLを失効させる運用を設けます。長期間有効なURLが残存していると、忘れた頃に第三者がアクセスする「寝ているリスク」が蓄積します。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
よくある質問
共有してしまったURLのトークンをすぐに無効化するにはどうすればよいですか?
トークンを発行したサービスの管理画面で即時失効させてください。ギガサイト便のURLも同時に失効させると、コンテンツ自体へのアクセスも遮断できます。被害確認のためにサービスのアクセスログも確認することをお勧めします。
リファラヘッダーでトークンが漏えいするのを防ぐ方法はありますか?
HTMLのheadに`<meta name="referrer" content="no-referrer">`を追加すると、外部リソース取得時のリファラ送信を抑制できます。ただし根本的にはクエリにトークンを含めない設計に変更するのが最善です。
アナリティクスタグ(GTMなど)がHTMLに入っていてもトークンは漏えいしますか?
GTMやGA4はページのURLをリファラとして送信するため、URLにトークンが含まれていれば収集されます。Googleのサーバーに送信されたデータは設定によって保持されるため、本番トークンはクエリに含めないことが前提条件です。