セキュリティ

AI生成HTMLにhttp混在が残っていないか確認する方法

AIが生成したHTMLをHTTPSのサーバーで公開した途端にブラウザが「保護されていない通信」と警告を出す、あるいは画像やフォントが真っ白になる——そんなhttp混在(Mixed Content)トラブルは公開直前に発覚しがちです。この記事では、混在の発見から修正確認まで一通りの手順を、コマンドラインとブラウザの両面から解説します。

なぜ危ないのか

HTTPSページ上でhttp://のリソースを読み込むと、ブラウザはその通信を暗号化されていない平文で行います。公共Wi-Fiや中間者攻撃の環境では、このhttp通信が傍受・改ざんされるリスクがあります。特にJavaScriptファイルがhttp経由で読み込まれている場合、攻撃者がスクリプト内容をすり替えてページ全体を乗っ取ることが理論上可能です。

AIはサンプルコードをトレーニングデータから引用するため、古いHTTPエンドポイントを参照するコードスニペットを混入させることがあります。生成時点ではローカルで動作していても、HTTPSホスティングに移行した瞬間にブラウザのMixed Contentブロック機能が働き、リソースが読み込まれなくなります。

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

ソースで見る場所

HTMLファイルを開いてターミナルで `grep -n 'http://' index.html` を実行します。`href`・`src`・`action`・`data-url`など属性名を問わず全件ヒットするため、出力行番号を元にエディタで該当箇所を修正します。プロトコルを省略した `//example.com/` 形式は相対プロトコルなので混在にはなりませんが、意図した通信先かどうかは別途確認が必要です。

Chromeの開発者ツールを開き「コンソール」タブを表示した状態でページをリロードすると、Mixed Contentの警告が `Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure resource 'http://...'` という形式で一覧表示されます。警告レベル(Warnings)とエラーレベル(Errors)で表示が分かれており、Errorsに表示されるリソースはブラウザが自動でブロックしています。

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

安全に共有する設定

修正方法は原則として`http://`を`https://`に書き換えるだけです。ただし参照先のサーバーがHTTPSに対応していない場合は、同等のHTTPS対応CDNやnpmパッケージの自己ホスト版に差し替える必要があります。例えば `http://code.jquery.com/jquery-1.12.0.min.js` は `https://code.jquery.com/jquery-3.7.1.min.js` に置き換えてバージョンも最新化することを推奨します。

Cloudflareのプロキシを経由して配信する場合、「自動HTTPS書き換え(Automatic HTTPS Rewrites)」機能を有効にすると、HTML内のhttp://リソースURLをサーバー側で自動的にhttps://に変換して配信できます。応急処置として有効ですが、参照先が実際にHTTPS非対応のときはブロックが発生するため、根本的な修正と併用してください。

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

再発防止ルール

AIへのプロンプトに「外部リソースはすべてhttps://で記述すること」という制約を加えます。さらに「外部CDNに依存するライブラリは使わず、インラインで実装するか、ファイル内にコピーすること」とすれば、Mixed Content自体を根本から防げます。

CIに `grep -r 'src=["\']http://' .` と `grep -r 'href=["\']http://' .` を含むスクリプトを追加し、http://リソース参照が含まれるコミットをブロックする仕組みを作ります。GitHub Actionsなら5行程度のyamlで設定でき、レビュー担当者の目視負担を大幅に減らせます。

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

よくある質問

ブラウザがhttp://リソースを自動でhttpsに書き換えてくれることはありますか?

Chrome 94以降はアップグレード可能なMixed Contentを自動でhttpsに昇格させます。ただし昇格に失敗するとリソースがブロックされるため、ソース側でhttpsに修正するのが確実です。

CSSファイル内で参照している画像がhttp://の場合も問題になりますか?

なります。CSSのurl()でhttp://の画像を参照している場合もMixed Contentとして扱われ、対応ブラウザではブロックまたは警告が表示されます。CSSファイルもgrepの対象に含めてください。

ローカルのfile://プロトコルで開いたときは警告が出ないのに公開後に問題になりました。なぜですか?

file://はHTTPSでもHTTPでもないためMixed Contentの制限が適用されません。公開前にlocalhostのHTTPSサーバーか本番に近い環境で必ず動作確認してください。

関連記事

セキュリティ

http混在を含むHTMLを共有するときのリスクと対策

http混在を含むHTMLを共有した場合のリスクを把握し、適切な対処法を選びたい方向け。ブラウザによる表示ブロックや通信傍受のリスクを具体的に示しながら、修正・代替策・共有設定の3つの観点から対策を解説します。

5分で読める
セキュリティ

社外レビュー前にhttp混在を検出するチェックリスト

社外レビュー用にHTMLを共有する前にhttp混在を確実に検出したい担当者向け。目視チェックだけでなくブラウザの開発者ツールやコマンドラインを活用した確認手順と、再発を防ぐ運用ルールをセットで解説します。

5分で読める
セキュリティ

http混在を防ぐAIプロンプトと公開前スキャン

AIを使ってHTMLを繰り返し生成する作業者向け。http混在を生成前に防ぐプロンプト設計と、生成後に素早くスキャンする方法を組み合わせ、毎回の手動チェック工数を減らしながらセキュリティ品質を維持する方法を紹介します。

5分で読める
セキュリティ

AI生成HTMLにXSSが残っていないか確認する方法

AIが生成したHTMLにXSSの脆弱性が残っていないか確認したい開発者・担当者向け。innerHTMLやevalなどの危険なパターンを検索するコマンド、ブラウザでの挙動確認、自動化の方法まで、公開前に完結できるXSSチェック手順をまとめます。

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