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