混合コンテンツとは

混合コンテンツは、最初の HTML が安全な HTTPS 接続で読み込まれ、他のリソース(画像、動画、スタイルシート、スクリプトなど)が安全でない HTTP 接続で読み込まれた場合に発生します。混合コンテンツと呼ばれるのは、同じページを表示するために HTTP と HTTPS の両方のコンテンツが読み込まれており、最初のリクエストが HTTPS で保護されていたためです。

安全でない HTTP プロトコルを使用してサブリソースをリクエストすると、攻撃者がネットワーク接続を傍受し、2 者間の通信を見たり変更したりするオンパス攻撃に対して脆弱であるため、ページ全体のセキュリティが低下します。これらのリソースを使用すると、攻撃者はユーザーを追跡してウェブサイト上のコンテンツを置き換えます。アクティブな混合コンテンツの場合は、安全でないリソースだけでなく、ページを完全に制御することもできます。

多くのブラウザでは、混合コンテンツの警告がユーザーに報告されますが、安全でないリクエストはすでに実行されており、ページのセキュリティは侵害されています。

混合コンテンツをブロックするブラウザが増えているのはそのためです。サイトに混合コンテンツがある場合、これを修正すると、ブラウザの厳格さが増してもコンテンツの読み込みが継続されます。

2 種類の混合コンテンツ

混合コンテンツには、アクティブとパッシブの 2 種類があります。

パッシブな混合コンテンツとは、ページの他の部分と相互作用しないコンテンツを指します。したがって、中間者攻撃は、そのコンテンツを傍受または変更した場合に可能な操作に制限されます。パッシブな混合コンテンツとは、画像、動画、音声コンテンツとして定義されます。

アクティブな混合コンテンツは、ページ全体と相互作用し、攻撃者がページに対してほぼすべての操作を行えるようにします。アクティブな混合コンテンツには、ブラウザがダウンロードして実行できるスクリプト、スタイルシート、iframe、その他のコードが含まれます。

パッシブな混合コンテンツ

パッシブな混合コンテンツは、それほど問題が少ないと考えられていますが、それでもサイトやユーザーにセキュリティ上の脅威をもたらします。 たとえば、攻撃者はサイト上の画像に対する HTTP リクエストを傍受して、それらの画像を差し替えたり、置き換えたりする可能性があります。攻撃者は [保存] と [削除] ボタンの画像を入れ替えて、ユーザーが意図せずにコンテンツを削除することがあります。商品図をわいせつなコンテンツやポルノ コンテンツに置き換えてサイトを変わらせたり、商品の画像を別のサイトや商品の広告に置き換えたりできます。

攻撃者がサイトのコンテンツを改変しなくても、混合コンテンツ リクエストを介してユーザーを追跡できます。攻撃者は、ユーザーがアクセスしたページや閲覧した商品を、ブラウザが読み込む画像やその他のリソースから判断できます。

パッシブな混合コンテンツが存在する場合、ほとんどのブラウザでは、ページ自体が HTTPS 経由で読み込まれた場合でも、ページが安全ではないことが URL バーに表示されます。この動作は、パッシブな混合コンテンツの例を含むこちらのデモで確認できます。

最近までは、パッシブな混合コンテンツがすべてのブラウザに読み込まれており、それをブロックすると多くのウェブサイトが機能しなくなっていました。この状況は変わり始めているため、サイト上の混合コンテンツのインスタンスをすべて更新することが極めて重要です。

Chrome では現在、パッシブな混合コンテンツの自動アップグレードを展開中です(可能な場合)。自動アップグレードでは、アセットが HTTPS 経由で利用可能でも、HTTP としてハードコードされている場合は、HTTPS バージョンがブラウザによって読み込まれます。セキュアなバージョンが見つからない場合、アセットは読み込まれません。

混合コンテンツが検出されたり、パッシブな混合コンテンツが自動アップグレードされたりするたびに、Chrome は DevTools の [Issues] タブに詳細なメッセージを記録し、問題の修正方法を確認します。

Chrome DevTools の [Issues] タブには、混合コンテンツの特定の問題とその修正方法に関する詳細情報が表示されます。

アクティブな混合コンテンツ

アクティブな混合コンテンツは、受動的な混合コンテンツよりも大きな脅威となります。攻撃者はアクティブなコンテンツを傍受して書き換え、それによってページやウェブサイト全体を完全に制御できる可能性があります。これにより攻撃者は、まったく異なるコンテンツを表示する、ユーザー パスワードなどのログイン認証情報を盗む、ユーザー セッション Cookie を盗む、ユーザーをまったく別のサイトにリダイレクトするなど、ページに関するあらゆる変更を加えることができます。

この脅威の重大度から、ほとんどのブラウザではユーザーを保護するためにこの種のコンテンツがすでにデフォルトでブロックされています。ただし、機能はブラウザのベンダーとバージョンによって異なります。

こちらのデモには、アクティブな混合コンテンツの例が含まれています。HTTP 経由でサンプルを読み込むと、HTTPS 経由でサンプルを読み込むときにブロックされるコンテンツを確認できます。[問題] タブには、ブロックされたコンテンツの詳細も表示されます。

Chrome DevTools の [Issues] タブには、混合コンテンツの特定の問題とその修正方法に関する詳細情報が表示されます。

混合コンテンツの仕様

ブラウザは、混合コンテンツの仕様に準拠しています。この仕様では、ブロック可能なコンテンツブロック可能なコンテンツのカテゴリが定義されています。

仕様上、リソースは「混合コンテンツとしての使用を許可するリスクが、ウェブの大部分を破壊するリスクよりも優先される」場合、任意でブロック可能なコンテンツとみなされます。これは、前述のパッシブな混合コンテンツのカテゴリのサブセットです。

「任意でブロック可能」でないコンテンツはすべてブロック可能と見なされるため、ブラウザでブロックする必要があります。

近年、HTTPS の使用が劇的に増加し、今では明らかにウェブのデフォルトとなっています。これにより、混合コンテンツの仕様任意でブロック可能として定義されているサブリソースタイプも含め、すべての混合コンテンツをブロックすることをブラウザで検討しやすくなります。そのため、Chrome ではこれらのサブリソースに対してより厳格なアプローチを取っています。

古いブラウザ

ウェブサイトの訪問者全員が最新のブラウザを使用しているわけではないことを覚えておくことが重要です。ブラウザのベンダーが異なれば、混合コンテンツの扱いはバージョンによって異なります。最悪の場合、古いブラウザやバージョンでは混合コンテンツがまったくブロックされないため、ユーザーにとって非常に危険です。

混合コンテンツの問題を解決することで、新しいブラウザでコンテンツが表示されるようになります。 また、古いブラウザでブロックされない危険なコンテンツからユーザーを保護することもできます。