混合コンテンツとは

Jo-el van Bergen 氏
Jo-el van Bergen

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

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

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

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

この 2 種類の混合コンテンツ

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

パッシブな混合コンテンツとは、ページの他の部分とやり取りしないコンテンツのことです。したがって、中間者攻撃は、そのコンテンツを傍受または変更した場合に何ができるかが制限されます。パッシブな混合コンテンツとは、画像、動画、音声のコンテンツのことです。

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

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

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

攻撃者がサイトのコンテンツを改変していない場合でも、混合コンテンツのリクエストによってユーザーを追跡できます。攻撃者は、ブラウザが読み込む画像やその他のリソースに基づいて、ユーザーがアクセスしたページや閲覧した商品を把握できます。

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

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

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

混合コンテンツが検出されるか、パッシブな混合コンテンツの自動アップグレードが行われるたびに、Chrome では詳細なメッセージが DevTools の [Issues] タブに記録され、具体的な問題の解決方法が示されます。

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

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

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

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

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

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

混合コンテンツの仕様

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

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

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

近年、HTTPS の使用が劇的に増加しており、今やウェブでは明らかなデフォルトになっています。これにより、ブラウザですべての混合コンテンツをブロックすることが現実的になりました。これには、混合コンテンツの仕様必要に応じてブロック可能として定義されているサブリソースタイプも含まれます。こうした理由から、Chrome ではこれらのサブリソースに対してより厳しく対処することになりました。

古いブラウザ

ウェブサイトを訪れるすべてのユーザーが最新のブラウザを使用しているわけではないことに留意してください。ブラウザ ベンダーのバージョンごとに、混合コンテンツの扱い方は異なります。最悪の場合は、古いブラウザやバージョンでは混合コンテンツがまったくブロックされないため、ユーザーにとって非常に安全ではありません。

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