Web - CORS
ナビゲーションに移動
検索に移動
概要
CORS (Cross-Origin Resource Sharing) は、Webブラウザにおけるセキュリティ機能の1つであり、異なるオリジン (ドメイン、プロトコル、ポート) 間でのリソース共有を制御する仕組みである。
CORSが必要となった経緯において、以前のWebブラウザには"同一オリジンポリシー"という制限があり、あるWebサイトから別のドメインのリソースにアクセスすることは基本的に禁止されていた。
しかし、現代のWebアプリケーションでは、異なるドメイン間でのデータのやり取りが必要不可欠となっている。
そこで、CORSが導入されて、安全に異なるオリジン間での通信が可能となった。
CORSの基本的な動作の流れを以下に示す。
- まず、Webブラウザが異なるオリジンへのリクエストを送信する場合、プリフライトリクエスト (OPTIONSメソッド) を送信することがある。
- このリクエストでは、実際のリクエストが許可されるかどうかを確認する。
- サーバは適切な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関数の使用
また、開発時の注意点として、ワイルドカード (*) を使用して全てのオリジンを許可することは、本番環境では推奨されない。
必要最小限のオリジンのみを許可して、適切なセキュリティ設定を行うことが重要である。