web-dev-qa-db-ja.com

無料のコンテンツ配信ネットワーク(CDN)を使用する場合のセキュリティリスクは何ですか?

私はコンテンツ配信ネットワークの研究をしていた。知らない人にとっては、CDNは、画像、CSS、JSなどの静的コンテンツをキャッシュし、エンドユーザーにすばやく提供するサーバーの大規模なコレクションです。 CDNは、コンテンツをキャッシュするだけでなく、コンテンツを取得するネットワークホップの数を制限することにより、パフォーマンスを大幅に向上させることができます。

私は無料のCDNの使用を検討していますが、それらを使用する際の潜在的なセキュリティリスクに関する記事、ブログ、またはフォーラムがほとんどないことに驚きました。無料のCDNを使用するリスクは何ですか?それらのリスクはどのように軽減されますか?

12
Joe Web

通常、CSS、JavaScript、グラフィックスをCDNからロードしているため、CDNサーバー(つまり、CDNを実行している会社)でrootのような権限を持つユーザーは次のことができます。

  • 画像をポルノなど、ユーザーにWebサイトで見せたくない他のものに置き換える
  • cSSを置き換えて、上記の画像を読み込んだり、デザインを台無しにしたりします。-IEおよびMozilla/Firefoxユーザーの場合、CSSにより任意のJavaScriptコードが実行される可能性があります
  • javaScriptを置き換えてユーザーを困らせ、他のサイトにリダイレクトし、エクスプロイトコードをロードしてトロイの木馬に感染させる
  • (技術的な問題があり、サイトのアセットの読み込みが通常よりはるかに遅くなります)

したがって、全体として、これらのことを行わないように十分信頼できるCDNのみを使用してください。

11
ThiefMaster

@ThiefMasterの答えは、外部制御されたコンテンツを使用するリスクを列挙する優れた機能を果たします。これは基本的に、ユーザーのブラウザーで任意のコードとコンテンツを実行または表示するカテゴリに分類されます。

私は主にあなたの最後の質問に焦点を合わせます:How are those risk mitigated?これは対処されませんでした-多くのものが(4年で)変更されて以来です。

CDNから外部リソースを含める場合の主な防御策は、 サブリソース整合性(SRI) を使用することです。 SRIは、作成者がロードすることを期待しているリソースの表現の暗号化ハッシュを含む整合性属性を持つ2つのHTML要素を拡張します。具体的には、これらは<script>要素と<link>要素であり、それぞれサードパーティのJavaScriptとCSSを含めるために一般的に使用されます。

例:

CSS:

<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css"完全性= "sha384-y3tfxAZXuh4HwSYylfB + J125MxIs6mR5FOHamPBG064zB + AFeWH94Ndvaorim8m8ndm = "anonymous">

JS:

<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js" integer = "sha384-vZ2WRJMwsjRMW/8U7i6PWi6AlO1L79snBrmgiDpgIWJ82z8eA5lenwvxbMV1PAh7" crossori

1つまたは複数のハッシュを使用できます。通常は、bases64エンコーディングのopensslで生成されます。ブラウザは、サポートする「最強」のブラウザを使用します。

Chrome および Firefox がサポートされるようになりました。

これらのブラウザーは、SRIで保護された要素に遭遇すると、ダイジェストを計算し、予期した結果と一致しない場合はネットワークエラーを返します。 CDNの更新から保護するために、他のCDNまたは独自のサーバーに failovers を設定できます。

上記で注意できるもう1つの防御策は、crossorigin="anonymous"属性の使用です。これにより、ブラウザーがCookieをCDNに送信しないようになり、 CORSリーク を回避して、リクエストサイズが小さくなるという副作用が生じます。

最後に、攻撃対象をCDNのみに制限するContent-Security-Policyを制限することにより、非常にわずかな利点を見つけることができます。これにより、脆弱なCDNが別のJSファイルに感染した場合でも、直接データにアクセスします(ただし、CDNを介してアクセスできます)。

上記のさまざまなリンクとは別に、別の有用なリファレンスはこれです Mozilla Hacks記事

8
Jedi