クロスサイト リクエスト フォージェリ攻撃は、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 マップは、パブリック マップ データへの読み取り専用ビューを提供します。これらのサービスを呼び出す可能性があるサード パーティのサイトを制限する理由はありません。