なぜ危ないのか
AIはリッチなコンテンツを求める指示に応えるため、地図・動画・SNSウィジェットをiframeで埋め込むコードを積極的に生成します。「インタラクティブなダッシュボードを作って」という曖昧な指示では、Chart.jsの代わりにGoogleデータスタジオのiframeが出てくることがあります。
生成後のスキャンなしに公開した場合、後から「そんなiframeが入っていたとは知らなかった」という状態になります。情報セキュリティ部門の監査でiframeによる外部送信が発覚すると、対応コストが共有前のチェックより大幅に高くなります。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
ソースで見る場所
生成直後のHTMLに`grep -c '<iframe' output.html`を実行し、件数を確認します。0であれば問題なし、1件以上あれば`grep -n '<iframe' output.html`で行番号を特定し、各srcの内容を個別に判断します。外部URLのsrcは要削除・内部パスのみ条件付きで許可という判断基準を設けると素早く処理できます。
JavaScriptによる動的生成も見逃さないよう、`grep -n 'createElement.*iframe\|innerHTML.*iframe' output.html`も合わせて実行します。ヒットした行のコードを読み、どのURLが設定されるか追跡してください。URLが変数から来る場合はその変数の初期値まで確認が必要です。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
安全に共有する設定
スキャンで外部iframeが0件になったHTMLをギガサイト便にアップロードします。アップロード後に実際のプレビューURLをブラウザで開き、DevToolsのNetworkタブで外部ドメインへのリクエストが発生していないことを最終確認します。
共有URLの設定では有効期限を短めに設定します。iframeがなくても他の外部リソース(CDNのフォント・外部CSSなど)が含まれる場合があるため、長期間有効なURLを残すことで予期しないリクエストが蓄積するリスクを下げます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
再発防止ルール
プロンプトの先頭に「外部iframeの使用禁止。地図が必要な場合はOpenStreetMapのスタティック画像API(`https://staticmap.openstreetmap.de/`)を`<img>`で表示すること。動画は`<video>`タグでローカルファイルを参照するか、サムネイル画像で代替すること」と記載します。
スキャンをnpmスクリプトに登録し、HTMLの生成とスキャンをワンコマンドで実行できるようにします。例:`"scan": "grep -n '<iframe.*src=.*http' dist/*.html && echo 'External iframes found!' || echo 'Clean'`。このコマンドをアップロード前のルーティンに組み込むことで確認漏れを防ぎます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
よくある質問
プロンプトでiframeを禁止したらGoogleマップが表示されなくなりましたが、代替案はありますか?
Googleマップの静的地図APIを使うと`<img>`タグで地図画像を表示できます。`https://maps.googleapis.com/maps/api/staticmap?center=東京&zoom=15&size=600x400&key=YOUR_KEY`のような形式でAPIキーは別途取得が必要です。
grepスキャンでiframeが0件でも、公開後に外部リクエストが発生することはありますか?
外部CSSの`@import`・外部フォント・外部画像URL・外部スクリプトからのリソース読み込みが発生します。iframeスキャンはあくまでiframe特有のリスクを排除するものであり、外部リソース全般のチェックはNetworkタブで補完してください。
AIがiframeを使わずに外部コンテンツを埋め込む方法を生成することはありますか?
Web Components・Shadow DOM・object要素・embed要素もiframeに近い外部コンテンツ埋め込みに使われます。スキャン対象に`<object`・`<embed`も追加することをお勧めします。