8

私が理解している限り、CORS は発信者が誰であるかを本当に確認できる方法であなたを正確に保護することはできません。発信者は任意の ORIGIN ヘッダーを送信できるためです。実際、オリジンヘッダーは制限されたヘッダーであるため、javascriptを介して設定できないことをどこかで読みましたが、それについてはよくわかりません。とにかく..独自の HttpClient を実装すると、元のヘッダーを簡単に偽造できるため、消費するはずのないサービスを消費する可能性があります。

次に、Origin ヘッダーが指定されていない場合でも、リクエストは機能します。たとえば、Google Chrome の Postman Extension を使用していますが、オリジン ヘッダーは送信されません。実際、手動で追加しようとしても、ネットワーク経由で送信されません。

したがって...

  • ...質問 1 : アプリケーションは Origin ヘッダーのないリクエストを拒否する必要がありますか? と...
  • ...質問 2 : CORS を REST サービスの安全性を高めるにはどうすればよいですか?

  • 4

    2 に答える 2

    5

    CORSをサポートしているブラウザとサポートしていないブラウザがあります。(私たちはCORSの初期段階にあり、ブラウザー間でのCORS仕様の実装には一貫性がありません)。

    • CORSをサポートしていないということは、ブラウザがクロスオリジンリクエストを検出すると、リクエストがブロックされてサーバーに送信されないことを意味します。
    • CORSをサポートするということは、ブラウザーがCORSポリシーを適用することを意味します。サーバーにリクエストを送信する前にOriginヘッダーを追加し、応答を受信した後、ブラウザーはAccess-Control-Allow-Originをチェックして応答を破棄するかどうかを決定します。

    同一生成元ポリシーは、XSS攻撃のリスクを軽減することを目的としています。この攻撃は主にブラウザで発生し、HttpClientでは発生しない可能性があります。CORSポリシーは、同一生成元ポリシーを緩和するためのものであり、両方のサイトの所有者である場合は、このポリシーを利用して2つのサイト間の通信を許可できます。

    ヒントCORSをサポートするということは、ブラウザがサーバーに接続して応答ヘッダーを取得した後、クロスオリジンセキュリティポリシーを適用する必要があることを意味します。つまり、必要なヘッダーがないか指定されているために応答が破棄された場合でも、要求が行われます。別のドメイン。これは、CORSを実装せず、サーバーに接続せずにリクエストをブロックするだけのブラウザとは大きく異なります。

    この本からの抜粋

    于 2013-02-16T11:36:49.690 に答える
    4

    CORS のポイントは、別のドメインで実行されている Javascript が API に AJAX リクエストを送信し、ユーザーの認証済みセッション Cookie を使用することを防止 (または許可) することです。

    CORSは適切な認証を置き換えることはできません。すべては、ブラウザーが既存の認証スキームに対して混乱した代理人として機能するのを防ぐことです。

    于 2013-02-15T16:23:33.010 に答える