セキュリティ

AI生成HTMLに社内ドメイン露出が残っていないか確認する方法

社内用のステージング環境やイントラのURLが、AIが生成したHTMLにそのまま埋め込まれることがあります。`https://internal.example.co.jp/api/`のような社内ドメインが残ったまま外部共有されると、社内システムの存在を第三者に知らせることになり、フィッシングや標的型攻撃の糸口になりかねません。本記事では確認箇所と手順を具体的に解説します。

なぜ危ないのか

社内ドメインが外部公開されたHTMLに含まれると、Googleのクローラーやアーカイブサイトがそのドメインをインデックスし、社内システムの存在が検索可能になるリスクがあります。特にAPIエンドポイントのURLが露出した場合、エンドポイントの構造を推測した不正アクセス試行につながります。

AIがHTMLを生成する際、プロンプトの例として添付したドキュメント内に社内URLが含まれていると、そのままHTMLのhref属性やfetch先として埋め込まれることがあります。出力を確認せずに公開すると、社内のIP制限内でしか動作しないリンクが外部から参照可能な状態になります。

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

ソースで見る場所

HTMLファイル内で確認すべき場所は`href`、`src`、`action`、`fetch(`の引数です。テキストエディタで`href="http`を検索し、外部URLと社内URLを一覧化してください。特に`10.`、`172.16.`、`192.168.`などのプライベートIPや、`.internal`、`.local`、`.intra`などのドメインサフィックスが含まれていないかを重点確認します。

JavaScriptコード内の文字列リテラルにも注意が必要です。`const API_URL = 'https://api.internal.example.co.jp'`のような定数定義は一見HTMLと無関係に見えますが、ページが動作するためにアクセスされるエンドポイントです。`<script>`タグの内容を折りたたまずに全文検索することを忘れないでください。

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

安全に共有する設定

社内ドメインを全て公開用ドメインまたはプレースホルダーに置換したことを確認したうえで、共有URLにはアクセス制限をかけてください。ギガサイト便ではメール認証や会社ドメイン制限を設定できるため、閲覧者を特定組織に絞ることができます。無制限の公開URLで社内ドメイン含みのHTMLを共有するのは、最もリスクが高いパターンです。

共有後にURLを変更・削除できる仕組みが重要です。万一確認漏れで社内ドメインが含まれたまま共有してしまったとき、即座にURLを無効化できれば被害を最小化できます。ファイルを直接メール添付した場合は回収が困難なため、URLベースの共有サービスを活用することを強くお勧めします。

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

再発防止ルール

AIにHTMLを生成させるプロンプトに添付する参考資料から、事前に社内URLを全て削除またはマスクしてください。`https://internal.example.co.jp`のような具体的なURLを含む資料をそのまま貼り付けると、AIがその文字列を引用する形で出力することがあります。

コードレビューのチェックリストに「社内ドメインの有無確認」を追加し、git pre-commitフックで`.internal`や`.intra`といった文字列を検出するスクリプトを入れると自動化できます。テキストマッチングで検出できるルールは、人間のチェックではなくツールに任せるのが継続的な品質維持の近道です。

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

よくある質問

プライベートIPアドレスが含まれている場合、外部から実際にアクセスされますか?

プライベートIPへのリクエストは外部ネットワークからは到達しませんが、ブラウザがリクエストを試みることでタイムアウトエラーが発生し、ページの表示速度低下やコンソールへのエラー出力につながります。また、攻撃者がIPレンジを推測する手がかりになる場合もあります。

社内ドメインをプレースホルダーに置換する際、JavaScriptの動作が壊れませんか?

fetchやXHRのエンドポイントURLを変更すると、そのAPIを呼び出す機能は動作しなくなります。社外レビュー用にはモックデータを返すスタブURLに置き換えるか、API呼び出し部分をコメントアウトして静的なサンプルデータで表示する形に調整することを推奨します。

Googleがインデックスした社内ドメインを含むページを削除する方法はありますか?

Google Search ConsoleのURL削除ツールで該当URLを申請するか、ページにnoindexタグを追加してクローラーに除外を指示します。ただしアーカイブサイト(Wayback Machine等)からは削除できない場合があるため、最初から外部公開しないことが重要です。

関連記事

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