web-dev-qa-db-ja.com

CORSとCSPの違いは何ですか?

私の観点からすると、クロスオリジンリソースシェアリング(CORS)およびコンテンツセキュリティポリシー(CSP)と呼ばれるテクノロジーは、目的と実装が非常に似ているようです。

どちらも、HTTP応答ヘッダーを介して、Webページの妥協のないバージョンに組み込まれているリソースの起源をホワイトリストに登録できるようです。私が見ることができる唯一の違いは、HTTP応答で承認できるものにおいてCSPがよりきめ細かいように見えることです。

47
nickform

CORSでは、ドメインの Same Origin Policy を緩和できます。

例えば通常、ユーザーが両方のexample.comおよびexample.org、同一生成元ポリシーによりexample.com AJAXへのリクエストからexample.org/current_user/full_user_detailsおよび応答へのアクセスを取得します。

これはWebのデフォルトポリシーであり、複数のサイトに同時にログインしたときにユーザーのデータが漏洩するのを防ぎます。

CORSを使用すると、example.orgは、Originを許可するというポリシーを設定できますhttps://example.com AJAXによって行われた応答を読み取ります。両方のexample.comおよびexample.orgは同じ会社によって運営されており、オリジン間のデータ共有はユーザーのブラウザで許可されます。サーバー側ではなく、クライアント側にのみ影響します。

一方、CSPは、現在のサイトで実行できるコンテンツのポリシーを設定します。たとえば、JavaScriptをインラインで実行できる場合、またはどのドメイン.jsファイルをロードできます。これは、攻撃者がHTMLページにスクリプトを挿入しようとする [〜#〜] xss [〜#〜] 攻撃に対する別の防衛線として機能するのに有益です。通常、 出力はエンコードされます 、ただし、開発者は1つの出力フィールドのみを忘れていたと言います。ポリシーがインラインスクリプトの実行を妨げているため、攻撃は阻止されます。

57
SilverlightFox

CORSを使用すると、サイトAは、サイトBに(訪問者のブラウザと資格情報を使用して)サイトAから(潜在的にプライベート)データを読み取る許可を与えることができます。

CSPにより、サイトはitselfが(XSSに対する防御としてなど)予期しないソースから(潜在的に悪意のある)コンテンツをロードするのを防ぐことができます。

42
Quentin

上記の回答はいずれも、CSPとCORSの明確で簡潔な違いを示していません。それらについての私の考え方は次のとおりです。

abc.comにリクエストを送信したいウェブサイトdef.netがあるとします。

  1. ユーザーがブラウザーでabc.comにアクセスすると、abc.comサーバーはabc.com HTTP応答を返します。この応答内のCSP制限により、abc.com in browserがリクエストを発行できませんdef.net。
  2. abc.com HTTP応答内にCSPの制限がない場合、ブラウザーのabc.comはdef.netに要求を送信できます。
  3. 要求を受信すると、def.netサーバーはdef.net HTTP応答で応答します。この応答内のCORS制限により、ブラウザーのabc.comがロードできなくなります。 (デフォルトでは、CORSで特に指定されていない限り、Same-Originポリシーは読み込みからの応答を制限することに注意してください)

したがって、CSPは上記の例でabc.comを保護し、same-Originポリシー(CORSの欠如)はdef.netを保護します。

16
paradite

CORSは、そのサービスを使用するための承認について第三者に確認します。そのため、第三者は許可を提供または拒否します。

たとえば、www.example.comのページがwww.example.orgにリクエストを行う必要がある場合、リクエストの前兆としてOrigin:www.example.comを指定してwww.example.orgに送信されたOPTIONSリクエストを送信する必要があります承認のため。現在、www.example.orgは許可を提供または拒否しています。

CSPは、特定の種類のコンテンツのロード元を指定することで、Webページが第三者から不注意に悪意のあるコンテンツをロードするのを防ぎます。したがって、たとえば、ディレクティブを使用して、次の各スクリプト、CSS、メディアなどに有効なソースを提供できます。

例:

コンテンツセキュリティポリシー:default-src 'none'; script-src 'self' www.google-analytics.com ajax.googleapis.com; connect-src 'self'; img-src 'self'; style-src 'self';

2
sbdh shvpj