インフラ用語集へ戻る

セキュリティ・認証 / Webセキュリティ

CORSとは

Cross-Origin Resource Sharing。別オリジンからブラウザ経由でAPIを呼べる条件を決める仕組みです。

用語集内のカードを見る

詳細な図解

ブラウザが別オリジンAPIを許可する流れ
フロントエンド別オリジンAPIを呼ぶ
Origin/PreflightOriginやOPTIONSを送る
API応答ACAOなどを返す
ブラウザ判断条件一致ならJSへ渡す
  • curl成功と区別する
  • Credentialsと*は併用しない
  • Vary: Originを確認

この記事で学べること

CORSを、定義だけで終わらせず、現場で出てくる場面、確認材料、見落としやすい点、関連語とのつながりまで順に確認できます。

  1. CORSを読むときの前提
  2. curl成功とブラウザ失敗を分ける
  3. Credentialsとワイルドカードに注意する
  4. プリフライトと許可ヘッダーを見る
  5. 変更証跡と引き継ぎ

実務メモ

ブラウザのOrigin、Credentials、プリフライトを分けて見る

どこで効くか

CORSはSPAとAPIを別ドメインで構成する場合、認証付きAPI、CDN配信、管理画面、外部SaaS連携で効きます。curl成功でもブラウザだけ失敗する調査で重要です。

残す証跡

証跡にはフロントエンドOrigin、API URL、OPTIONS応答、ACAO、Credentials、Allow-Methods、Allow-Headers、Vary: Origin、ブラウザエラー全文を残します。

避けたい誤解

Access-Control-Allow-Originの*とCredentialsは併用できません。OPTIONSをWAFや認証前処理で拒否したり、Vary: OriginがなくCDNで誤キャッシュされると再現が不安定になります。

まず確認すること

  • ブラウザNetworkでOPTIONSと本リクエストを確認する
  • Credentials有無とACAOを照合する
  • Vary: OriginとCDNキャッシュを確認する

CORSを読むときの前提

CORS(Cross-Origin Resource Sharing)は、ブラウザが別オリジンのAPI応答をJavaScriptへ渡してよいかを判断する仕組みです。サーバー間通信の許可設定ではなく、ブラウザ側の安全ルールです。

実務では、Origin、Access-Control-Allow-Origin、Access-Control-Allow-Credentials、Methods、Headers、OPTIONSプリフライト、Vary: Origin、CookieやAuthorizationヘッダーを確認します。

証跡には、フロントエンドOrigin、API URL、リクエストヘッダー、プリフライト応答、CORS応答ヘッダー、認証情報有無、ブラウザエラー全文を残します。

curl成功とブラウザ失敗を分ける

CORSはブラウザが適用するため、curlやサーバー間通信が成功しても、ブラウザからのJavaScript呼び出しは失敗することがあります。疎通確認だけでは判断できません。

調査では、ブラウザ開発者ツールのNetworkとConsoleを確認し、OPTIONSプリフライト、本リクエスト、レスポンスヘッダーを分けて見ます。

  • ブラウザのCORSエラー全文を保存する。
  • OPTIONSと本リクエストを分けて確認する。
  • curl結果だけで正常判断しない。

Credentialsとワイルドカードに注意する

CookieやAuthorizationヘッダーを含むリクエストでは、Access-Control-Allow-Credentialsの扱いが重要です。この場合、Access-Control-Allow-Originに*を使えません。

認証付きAPIでは、許可するOriginを明示し、Vary: Originでキャッシュ差分を扱います。CDNやプロキシがCORS応答を誤って共有しないようにします。

  • Credentials有無を確認する。
  • ACAOに*を使っていないか確認する。
  • Vary: Originを確認する。

プリフライトと許可ヘッダーを見る

カスタムヘッダー、JSON POST、PUT/DELETEなどでは、ブラウザが事前にOPTIONSプリフライトを送ることがあります。API側やWAFがOPTIONSを拒否すると、本リクエスト前に失敗します。

Access-Control-Allow-MethodsやAccess-Control-Allow-Headersに必要な値がない場合も失敗します。認証ヘッダー、Content-Type、X-Requested-Withなどを確認します。

  • OPTIONSがAPIまで届くか確認する。
  • Allow-MethodsとAllow-Headersを確認する。
  • WAFや認証前処理の拒否を確認する。

変更証跡と引き継ぎ

CORS対応では、許可Origin、対象API、認証情報有無、プリフライト要件、CDNキャッシュ、Vary、ブラウザエラーを残します。フロントエンド、API、認証、CDNの責任境界がまたがるためです。

引き継ぎでは、フロントエンド担当、API担当、認証基盤担当、関連語としてACAO、Origin、Cookie、CSRFを残すと確認しやすくなります。

  • 許可Originの理由を記録する。
  • プリフライト応答を保存する。
  • 認証CookieやAuthorizationの扱いを確認する。

関連語

同じ主要カテゴリの用語

セキュリティ・認証の学習順

同じ主要カテゴリの用語をまとめて確認できます。現在の用語を起点に、前後の用語へ進むと文脈を保ったまま読み進められます。

InfraEngKit内の関連機能