私はコンテンツ配信ネットワークの研究をしていた。知らない人にとっては、CDNは、画像、CSS、JSなどの静的コンテンツをキャッシュし、エンドユーザーにすばやく提供するサーバーの大規模なコレクションです。 CDNは、コンテンツをキャッシュするだけでなく、コンテンツを取得するネットワークホップの数を制限することにより、パフォーマンスを大幅に向上させることができます。
私は無料のCDNの使用を検討していますが、それらを使用する際の潜在的なセキュリティリスクに関する記事、ブログ、またはフォーラムがほとんどないことに驚きました。無料のCDNを使用するリスクは何ですか?それらのリスクはどのように軽減されますか?
通常、CSS、JavaScript、グラフィックスをCDNからロードしているため、CDNサーバー(つまり、CDNを実行している会社)でrootのような権限を持つユーザーは次のことができます。
したがって、全体として、これらのことを行わないように十分信頼できるCDNのみを使用してください。
@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記事 。