CORS(Cross-Origin Resource Sharing)
更新日:
用語解説
CORS(Cross-Origin Resource Sharing)は、同一オリジンポリシーの制限を緩め、許可した別のオリジン(サイト)からのデータの取得を認める仕組みです。
■ 試験で押さえるポイント
サーバがAccess-Control-Allow-Originなどのヘッダで、許可するオリジンを示します。
ブラウザは、事前の問合せ(プリフライト)で許可されているかを確認することがあります。
すべてのオリジンを許可する設定は、情報漏えいの原因になります。

■ 過去問での着眼点
CORSは制限を安全に緩める仕組みで、サーバ側の許可の設定が必要です。
例: api.example.comが、app.example.comからの要求だけを許可するよう、ヘッダで指定します。
■ プリフライト・資格情報とCSRFの関係
オリジンはscheme・host・portの組で決まり、同じ親ドメインの別ホストも別オリジンになる。CORSはブラウザが別オリジンの応答をスクリプトへ公開する条件などを制御するもので、サーバ側の認証・認可の代替ではない。
プリフライトではOPTIONSで予定のメソッドとヘッダを問い合わせる。成功しても本要求の認可は必要であり、単純なフォーム送信などはプリフライトなしで送られる場合がある。CORSによる読取り制限だけではCSRFを防げない。
credentialsがincludeの要求の応答を公開するには、Access-Control-Allow-Originに許可したオリジンを指定し、Access-Control-Allow-Credentialsをtrueにする。
Allow-Originの*はこの組合せに使えない。
要求のOriginを無条件に反射せず、許可リストと厳密に照合する。オリジンごとに応答ヘッダを変える場合はキャッシュへのVary: Originも検討する。非ブラウザのクライアントにはCORSがアクセス制限として働かない。