なぜ危ないのか
AIがHTMLを生成する際、プロンプトに含めたAPIキーやサンプルトークンをそのままscriptタグ内に出力することがあります。メールやチャットでファイルを送った瞬間、受信者がブラウザのソースビューを開けばキーが丸見えになり、第三者が同じキーを使ってAPIを不正呼び出しするリスクが生じます。
社外レビューでは相手の環境が統制外のため、ファイルを転送・保存・再共有される可能性が高くなります。キーが漏れた場合の被害は、APIの従量課金超過・データ取得・サービス停止と多岐にわたり、気づいた時点で即ローテーションが必要になるため、送付前の検出が最も低コストな対策です。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
ソースで見る場所
HTMLファイルをテキストエディタで開き、Ctrl+F(Mac: Command+F)で「key」「token」「secret」「Bearer」「sk-」「AIza」「pk_」を順に検索します。これらの文字列は多くのAPIプロバイダーがキーに使うプレフィックスであり、ヒットした箇所を一つずつ確認して実際のキーが入っていないか判断します。
scriptタグのsrc属性でCDN経由のライブラリを読み込んでいる場合、URLにトークンが付加されていることがあります。例として`https://cdn.example.com/sdk.js?apikey=XXXX`のような形式です。外部URLを全件リストアップし、クエリパラメータにキーが含まれていないか目視確認してください。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
安全に共有する設定
APIキーを含む処理がレビューの本質でない場合、該当のscriptブロックをコメントアウトして「<!-- REVIEW: APIキー省略 -->」と注記するのが最速の対処です。レビュアーに何が削除されたかを伝えることで、デザインや文言だけを確認してもらうフローが整います。
ギガサイト便のようなパスワード保護付き共有URLを使う場合でも、HTMLソース自体にキーが残っていれば受信者がダウンロードして確認できてしまいます。URLレベルの認証とソースの無害化は独立した対策であり、どちらか一方だけでは不十分です。共有前にキーをプレースホルダ文字列(例: `YOUR_API_KEY_HERE`)へ置換してから送付してください。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
再発防止ルール
AIへのプロンプトに「APIキーやシークレット値は一切含めず、変数名のプレースホルダで記述すること」と明示する一文を追加することで、生成段階でキーが混入するリスクを大幅に下げられます。チームのプロンプトテンプレートにこのルールを組み込んでおくと、担当者が変わっても徹底できます。
レビュー送付フローをPullRequestやチケットで管理している場合、送付前チェックリストをテンプレートに組み込み「APIキー検索済み: [ ]」という項目を追加します。チェックが入らないとマージ・送付できない運用にすることで、確認漏れを構造的に防止できます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
よくある質問
コメントアウトしたAPIキーも漏えいリスクがありますか?
はい、HTMLコメント(<!-- -->)はブラウザのソースビューで誰でも読めるため、コメントアウトだけでは対策になりません。キーを含む行ごと削除するかプレースホルダに置き換えてください。
AIが生成したJavaScriptの中に埋め込まれた場合、どう検出しますか?
インラインscriptタグ内のコードをテキスト検索するのが基本です。難読化・minifyされていない限りキーワード検索で発見できます。難読化されている場合はブラウザの開発者ツールでPretty-printしてから確認します。
キーの漏えいが疑われる場合、最初にすべき対応は何ですか?
まずAPIプロバイダーの管理画面で該当キーを即時無効化(ローテーションまたは削除)します。その後、アクセスログを確認して不正利用の有無を調べ、必要に応じて関係者へ通知します。