最初の HTML が安全な HTTPS 接続で読み込まれたものの、その他のリソース(画像、動画、スタイルシート、スクリプトなど)は安全でない HTTP 接続で読み込まれた場合、ページに混合コンテンツがあります。この名前は、1 つのページ上で HTTP と HTTPS のコンテンツが混在することを表します。
安全でない HTTP プロトコルを使用してサブリソースをリクエストすると、これらのリクエストはオンパス攻撃に対して脆弱であるため、ページのセキュリティが低下します。この攻撃では、攻撃者がネットワーク接続を傍受し、2 者間の通信を見たり変更したりします。これらのリソースを使用すると、攻撃者はユーザーを追跡してウェブサイト上のコンテンツを置き換えます。アクティブな混合コンテンツの場合は、安全でないリソースだけでなく、ページを完全に制御することもできます。
多くのブラウザでは混合コンテンツの警告がユーザーに報告されますが、安全でないリクエストはすでに実行されており、ページのセキュリティは侵害されています。多くの場合、このレポートは遅れます。
ほとんどのブラウザでは、セキュリティ上の理由から混合コンテンツがブロックされるようになっています。安全でないコンテンツのリクエストを安全なコンテンツに変更して、ページが正しく読み込まれるようにします。
2 種類の混合コンテンツ
混合コンテンツには、アクティブとパッシブの 2 種類があります。
パッシブな混合コンテンツ(画像、動画、音声など)はページの他の部分と相互作用しないため、中間者攻撃は、そのコンテンツを傍受または変更した場合に何ができるかが制限されます。
アクティブな混合コンテンツは、ページ全体を操作します。これには、スクリプト、スタイルシート、iframe、ブラウザがダウンロードして実行できるその他のコードが含まれます。アクティブな混合コンテンツに対する攻撃により、攻撃者はページに対してほぼすべての操作を行えるようになります。
パッシブな混合コンテンツ
パッシブな混合コンテンツは、アクティブな混合コンテンツよりもリスクは低いものの、そのリスクは残ります。たとえば、攻撃者は次のことを行えます。
- サイト上の画像に対する HTTP リクエストをインターセプトし、それらの画像を入れ替えます。
- ボタンの画像をユーザーが混乱させるように置き換えます。たとえば、保存するコンテンツを削除するなどします。
- 画像をポルノ コンテンツに置き換えて、サイトを改ざんする。
- 商品画像を別の広告の画像に差し替えてください。
攻撃者がサイトのコンテンツを変更しなくても、混合コンテンツのリクエストによってユーザーを追跡できます。また、ブラウザが読み込む画像やその他のリソースから、ユーザーがアクセスしたページや閲覧した商品を把握することもできます。
パッシブな混合コンテンツが存在する場合、ほとんどのブラウザでは、ページ自体が HTTPS 経由で読み込まれていても、そのページが安全でないとアドレスバーに表示されます。この動作は、こちらのデモで確認できます。
パッシブな混合コンテンツは、ブロックすると多くのウェブサイトが機能しなくなるため、最近まですべてのブラウザで読み込まれていました。この状況は変わり始めているため、サイト上の混合コンテンツのインスタンスをすべて更新することが重要です。
場合によっては、Chrome によってパッシブな混合コンテンツが自動的にアップグレードされます。つまり、アセットが HTTP としてハードコードされていても、HTTPS 経由で使用可能な場合、ブラウザは HTTPS バージョンを読み込みます。セキュアなバージョンがない場合、アセットは読み込まれません。
Chrome が混合コンテンツを検出したり、パッシブな混合コンテンツを自動アップグレードしたりするたびに、詳細なメッセージが DevTools の [問題] タブに記録され、問題の修正方法が示されます。
アクティブな混合コンテンツ
アクティブな混合コンテンツは、受動的な混合コンテンツよりも大きな脅威をもたらします。攻撃者はアクティブなコンテンツを傍受して書き換え、それを利用してページやウェブサイト全体を完全に制御する可能性があります。これにより、異なるコンテンツの表示、ユーザー パスワードなどのログイン認証情報の窃取、ユーザー セッション Cookie の窃取、別のサイトへのユーザーのリダイレクトなど、ページのあらゆる要素を変更できます。
アクティブな混合コンテンツのリスクは非常に高いため、ほとんどのブラウザはすでに、ユーザーを保護するためにこのタイプのコンテンツをブロックしています。ただし、動作はブラウザのベンダーやバージョンによって異なります。
このデモでは、アクティブな混合コンテンツの例を紹介しています。HTTP 経由でサンプルを読み込むと、HTTPS 経由でサンプルを読み込む際にブロックされるコンテンツを確認できます。ブロックされたコンテンツは、DevTools の [問題] タブでも詳細を確認できます。
混合コンテンツの仕様
ブラウザは、混合コンテンツの仕様に準拠しています。この仕様では、ブロック可能なコンテンツとブロック可能なコンテンツのカテゴリが定義されています。
リソースは、「混合コンテンツとしての使用を許可するリスクよりも、ウェブの大部分が破損するリスクよりも優先される場合」、任意でブロック可能なコンテンツと見なされます。これはパッシブな混合コンテンツのサブセットです。
「任意でブロック可能」でないすべての混合コンテンツは、ブロック可能とみなされるため、ブラウザでブロックする必要があります。
近年、HTTPS の使用が劇的に増加しており、HTTPS がウェブの明確なデフォルトになっています。これにより、混合コンテンツの仕様で任意でブロック可能として定義されているサブリソースタイプであっても、ブラウザですべての混合コンテンツをブロックすることがより現実的になりました。
古いブラウザ
一部のユーザーが古いブラウザを使用している可能性があります。混合コンテンツの扱い方は、ブラウザ バージョンによってベンダーによって異なります。最悪の場合、古いブラウザやバージョンでは混合コンテンツがまったくブロックされないため、ユーザーにとって安全ではありません。
すべてのリソースを安全に読み込み、混合コンテンツの問題を解決することで、コンテンツが確実に可視化され、古いブラウザではブロックされない可能性のある危険なコンテンツからユーザーを保護できます。