セキュリティ

source mapの露出を防ぐAIプロンプトと公開前スキャン

AIにHTMLを生成させるとき、プロンプトにsource mapを出力しないよう指示を入れていますか。多くの開発者はビルドツールの設定で対処しますが、AIが直接JSを生成する場合はツール設定が効かず、`sourceMappingURL`コメントが埋め込まれたまま出力されることがあります。公開前スキャンと合わせた二段構えで情報漏えいを防ぐ方法を解説します。

なぜ危ないのか

AIツールがJavaScriptコードを生成する際、トレーニングデータに含まれる実際のビルド出力を模倣して`//# sourceMappingURL=bundle.js.map`という行を末尾に付けることがあります。この行が存在すると、ブラウザは同じURLパス上に`.map`ファイルを探しにいき、存在しなければ404エラーが発生するだけですが、誰かが偶然または意図的にmapファイルを同じ場所に置いた場合はソースコードが丸見えになります。

AI生成コードをそのまま静的ホスティングにアップロードするワークフローでは、通常のビルドパイプラインを経由しないため、Webpackや Viteの`sourcemap: false`設定が機能しません。このため、ツール設定に頼るだけでは防ぎきれず、プロンプト段階での制御と公開前スキャンの両方が必要になります。

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

ソースで見る場所

生成されたHTMLファイルとその中から参照されているJSファイルを対象に、`grep -r 'sourceMappingURL' ./output/`を実行します。マッチした行には参照先のmapファイル名が含まれているので、同じディレクトリに実際に`.map`ファイルが存在するかも確認してください。

HTML内に`<script>`タグでインラインに書かれたJavaScriptブロックの末尾にも同様の注釈が入ることがあります。VS Codeのようなエディタを使っている場合は「フォルダ内検索」でワークスペース全体を対象に`sourceMappingURL`を検索すると見落としを防げます。

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

安全に共有する設定

AIへのプロンプトに「出力するJavaScriptの末尾に`//# sourceMappingURL`の行を含めないこと」と明示的に記載します。システムプロンプトやリユーザブルなプロンプトテンプレートにこのルールを加えておくと、毎回の指示を省けます。生成後は必ず前述のgrepコマンドで確認する習慣をつけてください。

公開前スキャンを自動化するには、`find ./dist -name '*.map' | wc -l`でmapファイルの存在数を確認し、0以外であればアップロードをブロックするシェルスクリプトをデプロイ前フックとして設定します。GitHub Actionsであればworkflowのstepにこの確認を追加するだけで実装できます。

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

再発防止ルール

プロジェクトのREADMEまたはContributing.mdに「AI生成コードのsource map検査」を必須ステップとして記載し、新規参加者がオンボーディング時に気づける場所に置きます。定期的にPRのdiffを見てsourceMappingURLが含まれていないかレビュアーが確認するルールも効果的です。

社内でAI生成コードのレビュールールを整備する際は、source mapだけでなくAPIキー、内部ドメイン名、個人情報に関する確認項目も同じチェックリストに並べると、レビュー漏れが起きにくくなります。ツールごとのデフォルト動作を一覧化した内部wikiを作っておくと属人化を防げます。

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

よくある質問

AIへのプロンプトでsource mapを禁止しても、毎回忘れそうです。効率的な方法はありますか?

ChatGPTのカスタム指示やClaude.aiのシステムプロンプトに「JSの末尾にsourceMappingURLを含めない」を一度登録すれば、以降のセッションで自動的に適用されます。

sourceMappingURLコメントがあるだけでmapファイルがない場合、セキュリティ上の問題はありますか?

直ちに情報漏えいは発生しませんが、ブラウザがmapファイルへのリクエストを送るためサーバーログに残ります。また後でmapファイルが誤追加されるリスクがあるため、コメント自体を除去するのが最善です。

CSSのsource mapも同様に危険ですか?

はい。CSSのsource mapにはSassやPostCSSの処理前のソースが含まれることがあり、設計上の変数名や内部命名規則が露出します。JSと同様に公開前にスキャンしてください。

関連記事

セキュリティ

APIキー直書きを防ぐAIプロンプトと公開前スキャン

AI生成HTMLへのAPIキー直書きをプロンプト設計で防ぎ、公開前スキャンで二重検出したい開発者・制作担当者向け。具体的なプロンプト文言とgrepコマンドをセットで紹介します。

4分で読める
「セキュリティ」の記事をもっと見る →