41

すべてのドメインをCORSに追加するのではなく、一連のドメインのみを追加する必要があると言われています。しかし、一連のドメインを追加するのは簡単ではない場合があります。たとえば、API を公開したい場合、その API を呼び出したいドメインごとに、許可されたドメインのリストにそのドメインを追加するように連絡する必要があります。

セキュリティへの影響と作業量の削減との間で、意識的にトレードオフの決定を下したいと思います。

セキュリティ上の問題は、DoS 攻撃CSRF攻撃だけです。CSRF 攻撃は、すでに IMG 要素と FORM 要素を使用して実行できます。CORS に関連する DoS 攻撃は、リファラー ヘッダーでリクエストをブロックすることで克服できます。

セキュリティへの影響がありませんか?


===編集===

  • Access-Control-Allow-CredentialsHeader が設定されていないことを前提としています
  • ドメイン「CORSアクセス」の特定のリストを追加する方法を知っているため、すべてのドメイン「CORSアクセス」を追加することのセキュリティへの影響のみに関心があります
4

6 に答える 6

28

クロスサイト リクエスト フォージェリ攻撃は、Access-Control-Allow-Origin が対処する主な懸念事項です。

Ryan は、コンテンツの取得に関しては確かに正しいです。ただし、リクエストの作成に関しては、ここで言うべきことがさらにあります。現在、多くの Web サイトが RESTful Web サービスを提供しており、バックエンドに大幅な変更を加える可能性がある幅広い機能を公開しています。非常に多くの場合、これらの RESTful サービスは、XHR (AJAX など) リクエスト (おそらくフロントエンドとしての「シングル ページ アプリケーション」) で呼び出されることを意図しています。ユーザーが悪意のあるサードパーティのサイトにアクセスしたときに、これらのサービスへのアクセスを許可するアクティブなセッションがある場合、そのサイトはバックグラウンドで REST エンドポイントを呼び出そうとし、ユーザーまたはサイトを危険にさらす可能性のある値を渡します。REST サービスの定義方法に応じて、これを防ぐさまざまな方法があります。

シングル ページ アプリの REST Web サービスの特定のケースでは、バックエンド REST エンドポイントへのすべての要求が XHR で行われ、XHR 以外の要求を拒否するように指定できます。これは、カスタム リクエスト ヘッダー (jQuery の X-Requested-With など) の存在を確認することで指示できます。これらのヘッダーを設定できるのは、XHR タイプのリクエストのみです。フォームや埋め込みリソースからの単純な GET および POST リクエストはできません。最後に、XHR リクエストを指示したい理由により、元の質問に戻ります。XHR リクエストは CORS ルールの対象となります。

を許可した場合Access-Control-Allow-Origin: *、すべてのサイトがユーザーに代わって REST エンドポイントに対して AJAX 要求を行うことができます。REST エンドポイントに何らかの種類の機密データが含まれている場合、またはデータの永続性が許可されている場合、これは容認できないセキュリティ上の脆弱性です。代わりに、私が説明したように XHR のみのリクエストを強制し、それらのリクエストを許可するオリジンのホワイトリストを定義します。

REST エンドポイントが機密情報を公開しない場合、またはユーザーが永続的なデータ変更を行うことを許可しない場合はAccess-Control-Allow-Origin: *、適切な決定である可能性があることに注意してください。たとえば、Google マップは、パブリック マップ データへの読み取り専用ビューを提供します。これらのサービスを呼び出す可能性があるサード パーティのサイトを制限する理由はありません。

于 2013-11-25T07:22:11.880 に答える