Web - CORS

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2024年12月28日 (土) 07:10時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == CORS (Cross-Origin Resource Sharing) は、Webブラウザにおけるセキュリティ機能の1つであり、異なるオリジン (ドメイン、プロトコル、ポート) 間でのリソース共有を制御する仕組みである。<br> <br> CORSが必要となった経緯において、以前のWebブラウザには<u>"同一オリジンポリシー"</u>という制限があり、あるWebサイトから別のドメインのリソースに…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

CORS (Cross-Origin Resource Sharing) は、Webブラウザにおけるセキュリティ機能の1つであり、異なるオリジン (ドメイン、プロトコル、ポート) 間でのリソース共有を制御する仕組みである。

CORSが必要となった経緯において、以前のWebブラウザには"同一オリジンポリシー"という制限があり、あるWebサイトから別のドメインのリソースにアクセスすることは基本的に禁止されていた。
しかし、現代のWebアプリケーションでは、異なるドメイン間でのデータのやり取りが必要不可欠となっている。
そこで、CORSが導入されて、安全に異なるオリジン間での通信が可能となった。

CORSの基本的な動作の流れを以下に示す。

  1. まず、Webブラウザが異なるオリジンへのリクエストを送信する場合、プリフライトリクエスト (OPTIONSメソッド) を送信することがある。
  2. このリクエストでは、実際のリクエストが許可されるかどうかを確認する。
  3. サーバは適切なCORSヘッダを返すことにより、どのオリジンからのアクセスを許可するか、どのHTTPメソッドを許可するか、どのヘッダの使用を許可するか等を指定する。


重要なCORSヘッダとして、以下に示すものがある。

  • Access-Control-Allow-Origin (許可するオリジンの指定)
  • Access-Control-Allow-Methods (許可するHTTPメソッドの指定)
  • Access-Control-Allow-Headers (許可するヘッダの指定)


これらのヘッダをサーバ側で適切に設定することにより、クロスオリジンリクエストを制御できる。

セキュリティでは、CORSは悪意のあるWebサイトからの不正なリクエストを防いで、認証されたリクエストのみを許可することにより、
クロスサイトスクリプティング (XSS) やクロスサイトリクエストフォージェリ (CSRF) 等の攻撃からWebアプリケーションを保護する。

サーバ側でCORSを設定する方法は複数存在しており、各言語やフレームワークで適切な方法が提供されている。

  • Node.js
    corsミドルウェア
  • Python
    django-cors-headers
    Flask-CORS
  • PHP
    header関数の使用


また、開発時の注意点として、ワイルドカード (*) を使用して全てのオリジンを許可することは、本番環境では推奨されない。
必要最小限のオリジンのみを許可して、適切なセキュリティ設定を行うことが重要である。