CORS(Cross-Origin Resource Sharing,オリジン間リソース共有)【情報処理安全確保支援士試験 平成31年度 春期 午後1 問1 No.2】

情報処理安全確保支援士試験 平成31年度 春期 午後1 問1 No.2

【出典:情報処理安全確保支援士試験 平成31年度 春期 午後1問1(一部、加工あり)】

【CORSの概要】
 CORSとは、あるWebサイトから他のWebサイトへのアクセスを制御することができる仕組みである。XMLHttpRequestを使って”https://test2.example.com/test”にリクエストを送るスクリプトの例を図2に示す。


 Webブラウザが”https://test1.example.com/”にアクセスし、図2のスクリプトを含むページを読み込んだとする。図2のスクリプトが実行されると、最初にWebブラウザは”https://test2.example.com/test”にプリフライトリクエストと呼ばれるリクエストを送る。そうすると、実際のリクエスト(以下、メインリクエストという)で許可されるメソッド名やヘッダフィールド名などがレスポンスとして返る。その後、メインリクエストを送り、レスポンスが返る。この一連の動作を図3に、また、図3中の(ⅲ)~(ⅵ)のリクエストとレスポンスの先頭部分の例を図4~図7に示す。


 また、CORSでは通常、Webブラウザは、スクリプトを読み込んだページのオリジンだけにCookieや、ベーシック認証の情報を送る。図2では設定していないが、XMLHttpRequestのプロパティのwithCredentialsの値がtrueに設定されている場合、図3であれば、(e:ⅴ)の動作の際に、test2.example.comから発行されたCookieが送られる。

e:

 Cookieはサーバで発行され、Webブラウザが必要に応じて送ります。
 「CORSでは通常、Webブラウザは、スクリプトを読み込んだページのオリジンだけにCookieや、ベーシック認証の情報を送る」とあります。
 これは、図3の(ⅱ)のスクリプト発行元であるtest1.example.comだけにWebブラウザからCookieを送信することを示しています。
 一方、「XMLHttpRequestのプロパティのwithCredentialsの値がtrueに設定されている場合」には、「test2.example.comから発行されたCookieが送られる」とあるように、図3の(ⅲ)か(ⅴ)で、Webブラウザからtest2.example.comへCookieが送られることになります。
 問題文でヒントになりそうな箇所を探すと以下の記述があります。
 「図2のスクリプトが実行されると、最初にWebブラウザは”https://test2.example.com/test”にプリフライトリクエストと呼ばれるリクエストを送る。そうすると、実際のリクエスト(以下、メインリクエストという)で許可されるメソッド名やヘッダフィールド名などがレスポンスとして返る。その後、メインリクエストを送り、レスポンスが返る。」
 これは、上記の「XMLHttpRequestのプロパティのwithCredentialsの値がtrueに設定されている場合」のやり取りをプリフライトリクエスト(ⅲ)とレスポンス(ⅳ)で行い、それに応じて(ⅴ)のメインリクエストでCookieが送られると考えれば良さそうです。