混合コンテンツが発生する理由
- HTTPS移行前から残っているハードコードされた
http://URL。 サイトがまだプレーンHTTPで運用されていた頃に書かれた古いマークアップ、CMSのコンテンツ、あるいは保存されたアセットURLのデータベースが、更新されないまま残っているケースです。 - 依然としてHTTPで配信され続けるサードパーティの埋め込みやウィジェット。 広告ネットワーク、コメントウィジェット、あるいは配信元自体をHTTPSに移行していない古いアナリティクススニペットなどです。
- プロトコル移行時に見落とされたCDNやアセットホストのURL。 メインドメインはHTTPSに移行済みでも、画像やフォントを配信するサブドメインやサードパーティのアセットホストが同時に更新されていなかったケースです。
- HTTPリンクが貼り付けられたユーザー生成コンテンツ。 ユーザーが投稿したコンテンツ(フォーラムの投稿、商品レビュー、CMSのフィールドなど)に含まれる
http://の画像や埋め込みURLが、そのままレンダリングされてしまうケースです。
すべての箇所を特定する方法
Scanverraは、実際のブラウザでページを読み込み、その実際のネットワーク通信を取得することで混合コンテンツを検出します。Browser Testとセキュリティスキャンの両方が、ページ自体はHTTPSで配信されているにもかかわらずhttp://で始まるリクエストにフラグを立てます。これはHTMLソースの静的な走査ではなく、実際に取得されたネットワークリクエストに基づいているため、マークアップに直接ハードコードされたリソースだけでなく、ページの描画後にJavaScriptによって動的に読み込まれるリソースも検出できます。
修正方法
1. ハードコードされたhttp:// URLをhttps://に置き換える
1<img src="http://cdn.example.com/testimonial-1.jpg" alt="Customer headshot" />1<img src="https://cdn.example.com/testimonial-1.jpg" alt="Customer headshot" />2. 保険としてupgrade-insecure-requestsを追加する
このCSPディレクティブは、残ってしまったhttp://リクエストを送信前に自動的にhttps://へ書き換えるようブラウザに指示し、見落としたURLを補ってくれます。ただしこれは、そのホスト上でリソースが実際にHTTPS経由で取得可能な場合にのみ機能します。
1Content-Security-Policy: upgrade-insecure-requests3. サードパーティの埋め込みを個別に監査する
自分では直接コントロールできない混合コンテンツの原因として最も多いのはサードパーティのスクリプトやウィジェットです。それぞれのドキュメントでHTTPS対応の埋め込みURLがあるか確認し、提供されていないものは削除してください。
4. ユーザー投稿コンテンツ内のプロトコルをサニタイズまたは書き換える
ユーザーがURLを含むコンテンツを投稿できる場合は、貼り付けられたプロトコルをそのまま描画するのではなく、描画時にhttp://をhttps://に書き換える(あるいは投稿自体を拒否する)ようにしてください。
Scanverraがこれをどう検出するか
ScanverraのBrowser Testとセキュリティスキャンの両方が、実際のブラウザでページの実際のネットワークリクエストを取得し、HTTPSで配信されているページ上でhttp://から始まるリクエストにフラグを立てます。これはソースのテキスト検索ではなく、実際のトラフィックに対する本物のランタイムチェックです。