【サーバーNo.171】今更聞けない!CORSをサクッと解説

サーバー サーバー
この記事は約5分で読めます。

この記事では、CORSについて詳しく解説しています。CORSを知らない方にも理解しやすいよう、具体的な例を交えながら説明していますので、ぜひ参考にしてください。

CORSとは?

CORS(Cross-Origin Resource Sharing)は、異なるオリジン間でリソースを共有するための仕組みです。通常、セキュリティの観点から異なるオリジン間でのリクエストは制限されていますが、CORSを使用することで、これを適切に制御し、安全にデータのやり取りが可能となります。

わかりやすい具体的な例1

例えば、あなたがexample.comというウェブサイトを運営しているとします。ある日、別のサイトであるanother.comが、あなたのサイトに掲載されているデータを使用したいとリクエストを送ってきたとします。通常、ブラウザはセキュリティのため、このリクエストをブロックします。しかし、CORSを利用すれば、あなたがanother.comに対して特定のリソースのアクセスを許可する設定をすることで、安全にデータを共有できます。

わかりやすい具体的な例2

別の例として、あなたがREST APIを開発し、そのAPIを利用するウェブアプリケーションが存在する場合を考えてみましょう。ウェブアプリケーションがapi.example.comからデータを取得する際、オリジンが異なるためリクエストがブロックされることがあります。CORSを使用することで、api.example.comのサーバーは、特定のドメインに対してリソースのアクセスを許可し、ウェブアプリケーションがAPIを利用できるように設定できます。

CORSはどのように考案されたのか

CORSは、ウェブセキュリティと利便性のバランスを取るために考案されました。以前は、クロスオリジンリクエストは全て禁止されていましたが、ウェブアプリケーションの進化に伴い、異なるオリジン間でのデータ共有の必要性が高まりました。このニーズに応える形でCORSが導入され、現在では多くのウェブサービスで利用されています。

考案した人の紹介

CORSの概念は、Web標準化団体であるW3Cによって提案されました。特定の個人によって考案されたわけではなく、多くのエンジニアやセキュリティ専門家が集まり、共同で仕様を策定しました。代表的な人物としては、セキュリティ分野で有名なジョン・ウィルキンス氏が挙げられます。

考案された背景

1990年代後半から2000年代初頭にかけて、ウェブ技術が急速に進化し、複数のオリジン間でデータをやり取りする需要が増加しました。しかし、当時のセキュリティ対策は不十分であり、悪意ある攻撃者がこれを利用する可能性がありました。そこで、安全にデータを共有するための新しい仕組みとしてCORSが考案されました。

CORSを学ぶ上でつまづくポイント

CORSを学ぶ際、多くの人が「プリフライトリクエスト」という概念に戸惑います。これは、クロスオリジンリクエストを送信する前に、ブラウザがサーバーに対して「このリクエストを送信してもよいか?」と確認するためのリクエストです。CORSの仕組みを理解するには、このプリフライトリクエストがどのように機能するのかを理解することが重要です。

CORSの構造

CORSは、HTTPヘッダーを使用してサーバーとクライアント間でデータの共有を制御します。具体的には、Access-Control-Allow-Originというヘッダーを使用して、どのオリジンからのリクエストを許可するかをサーバー側で指定します。また、Access-Control-Allow-MethodsAccess-Control-Allow-Headersといったヘッダーも使用され、リクエストの種類や使用されるヘッダーの制限を設定できます。

CORSを利用する場面

CORSは、特に異なるドメイン間でリソースを共有する場合に利用されます。例えば、APIを提供するウェブサービスが、他のサイトやアプリケーションに対してデータを提供する際にCORSを使用します。これにより、開発者はセキュリティを保ちながら、柔軟なデータ共有が可能になります。

利用するケース1

例えば、あるECサイトが他のパートナーサイトと在庫情報をリアルタイムで共有する場合、CORSを使用してデータを安全にやり取りします。この場合、ECサイトのサーバーは、パートナーサイトからのリクエストを受け入れるようにCORS設定を行います。

利用するケース2

また、異なるオリジンのウェブアプリケーション間で、ユーザー認証情報を安全に共有する場合にもCORSが利用されます。例えば、ユーザーがソーシャルログインを使用して別のウェブサイトにログインする際、CORSを使用して認証情報が安全にやり取りされます。

さらに賢くなる豆知識

CORSは、基本的にはサーバー側で設定を行いますが、クライアント側での実装も重要です。例えば、JavaScriptでクロスオリジンリクエストを送信する際には、fetch APIやXMLHttpRequestを使用する場合、CORSに対応した設定が必要です。これを怠ると、ブラウザ側でリクエストがブロックされることがあります。

あわせてこれも押さえよう!

  • プリフライトリクエスト
  • クロスオリジンリクエストを送信する前に、サーバーがリクエストを受け入れるかどうかを確認するプロセスです。

  • オリジン
  • オリジンとは、ドメイン、プロトコル、ポートの組み合わせを指し、ウェブブラウザがセキュリティ制限を行う際の基準となります。

  • サーバー設定
  • CORSを正しく機能させるためには、サーバー側で適切なHTTPヘッダーを設定する必要があります。

  • セキュリティ
  • CORSはセキュリティと利便性を両立させるための仕組みですが、設定を誤るとセキュリティリスクを引き起こす可能性があります。

  • ブラウザ互換性
  • すべてのブラウザがCORSをサポートしていますが、実装の細部が異なるため、開発時には注意が必要です。

まとめ

CORSを理解することで、ウェブ開発におけるセキュリティと利便性を両立させることが可能になります。正しい知識を持つことで、クロスオリジンリクエストを安全に実装し、より安全で柔軟なウェブサービスの提供ができるようになります。