質問: こちらの資料にて以下のような記述が有るのですが。このCookieはサーバーサイドのセッションとして扱っていいのでしょうか? https://www.jpcert.or.jp/research/HTML5-20131030.pdf ``` 特定のオリジンからのみ画像コンテンツへのアクセスを許可したい場合には、Origin リクエストヘッダおよび Access-Control-Allow-Origin レスポンスヘッダの指定に加えて、従来どおり Cookie を使用しなければなら ない。Cookie を使用せず、Origin リクエストヘッダおよび Access-Control-Allow-Origin レスポンスヘッダの 指定だけでは、攻撃者が、ブラウザの替わりにツールなどを使用して任意の Origin リクエストヘッダを付与し たリクエストを送信することにより、JavaScript を経由せずに直接画像にアクセスすることが可能だからであ る。 ``` 読み解いた自分なりの考えを述べると、トークン等を設置しないと偽造オリジンリクエストヘッダを使う事でAccessが出来てしまうからクッキーを使うべき とゆう解釈に至りました。 つまり、以下のいずれかの方法を取ることで上記問題は解決すると思っています。 ・クライアントではPOSTにサーバーから提供された一時的なトークンを含む ・サーバーから提供された一時的なトークンをクッキーに添付しサーバー通信を行う このような解釈で有っているかご教授願います。
回答: 以下は、この解釈で問題ないと思います。 > > 読み解いた自分なりの考えを述べると、トークン等を設置しないと偽造オリジンリクエストヘッダを使う事でAccessが出来てしまうからクッキーを使うべき > > とゆう解釈に至りました。 > > > しかし、以下はちょっと意味が分かりませんでした。 > > つまり、以下のいずれかの方法を取ることで上記問題は解決すると思っています。 > > ・クライアントではPOSTにサーバーから提供された一時的なトークンを含む > > ・サーバーから提供された一時的なトークンをクッキーに添付しサーバー通信を行う > > > クッキーと言うのは、サーバー側でSet-Cookieするものです。何らかの方法で、画像提供側でトークンなりセッションIDのクッキーをSet-Cookieする必要があります。そして、画像提供の際に、セッションIDなりトークンをチェックして、OKなら画像コンテンツを送信するようにします。 しかし、JPCERT/CCのドキュメントどおりにやっても、画像側のクッキーは送信されません。その理由は、おそらくHTML5の仕様が流動的な段階で書かれたドキュメントなので、その後仕様が変更されたからだと推測します。 下記のように、crossorigin="use-credentials" を指定する必要があります。 ``` ``` そして、画像提供側では、以下のレスポンスヘッダを送信する必要があります。こちらは、通常のCORSと同じですね。 ``` Access-Control-Allow-Origin: http://example.jp Access-Control-Allow-Credentials: true ```