やさしいネットワークとセキュリティ

情報処理安全確保支援士、ネットワークスペシャリスト、技術士として、資格取得を目指す方に有益な情報を発信します。

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

 情報処理技術者試験、情報処理安全確保支援士試験の午後問題を通じて、情報セキュリティの知識を体系的に蓄積していきましょう。

 キーワードに加え、設計やインシデント対応能力をシミュレーションできる良い学びの場ですので、試験合格はもちろん、情報処理安全確保支援士となった後も能力向上のために学習できるいい機会です。

 今回は、「CORS(Cross-Origin Resource Sharing,オリジン間リソース共有)」を取り上げた「情報処理安全確保支援士試験 平成31年度 春期 午後1問1 設問2」です。

 問題文中、設問に該当する部分ですぐに解答を説明しています。

 ストーリーとして何度も読みこなすと、自然に記憶に定着してくると思います。

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

問1 Webサイトのセキュリティに関する次の記述を読んで、設問1〜3に答えよ。

(略)

【CORSの概要】

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

f:id:aolaniengineer:20200508042636p:plain

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

f:id:aolaniengineer:20200508042719p:plain

f:id:aolaniengineer:20200508042738p:plain

f:id:aolaniengineer:20200508042806p:plain

f:id:aolaniengineer:20200508042822p:plain

f:id:aolaniengineer:20200508042835p:plain

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

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

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が送られると考えれば良さそうです。