0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CORS

Last updated at Posted at 2020-07-28

この記事は以下の書籍を参考にして執筆しました。

#CORS
異なるオリジンとの通信を可能にする。

##Access-Control-Allow-Origin
クロスオリジンからの読み出しを居するための仕掛け。
アクセスされる側がHTTPレスポンスヘッダとして出力する。

##シンプルなリクエスト
特定の条件を見たすシンプルなリクエストの場合、XMLHttpRequestで異なるオリジンにHTTPリクエストを送ることが許可になしに可能。

http://example.jsからhttp://example.comへのXMLHttptRequestを許可する場合は
http://example.comが以下のようにHTTPレスポンスヘッダを送信する。

Access-Control-Allow-Origin:http://example.js

出典:体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[リフロー版] 脆弱性が生まれる原理と対策の実践

##プリフライトリクエスト
シンプルナリクエストでないクロスサイトオリジンアクセスでは、ブラウザはプリフライトリクエストというHTTPリクエストを送信する。

このリクエストを受けたサーバは以下のヘッダに応答する必要がある。

揚州の種類 リクエスト レスポンス
メソッドに対する許可 Access-Control-Request-Method Access-Control-Allow-Method
ヘッダに対する許可 Access-Control-Request-Headers Access-Control-Allow-Headers
オリジンに対する許可 Orijin Access-Control-Allow-Orijin

###プリフライトリクエストの受け取り

if ($_SERVER['REQUEST_METHOD'] === "OPTIONS") {
  //プリフライトリクエスト受取時の処理
}elseif ($_SERVER['REQUEST_METHOD'] === "POST") {
  //ポスト処理
}

出典:体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[リフロー版] 脆弱性が生まれる原理と対策の実践

プリフラを受け取って、ヘッダに返答したら次は正常のPOSTが送信されるから条件付を記載する。
その際にheader('Access-Control-Allow-Origin: URL');
を忘れないように。

##認証情報を含むリクエスト
デフォルトではクロスサイトオリジンに対するリクエストにはHTTP認証やクッキーなどの認証に用いられるリクエストヘッダは自動的に動診されない。

XMLHttpRequestのプロパティにwithCredentialsをセットする必要がある。

###withCredentialsをセットする

req.open('GET', URL);
req.withCredentials = true;

出典:体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[リフロー版] 脆弱性が生まれる原理と対策の実践

withCredentialsをtrueにするとAccess-Control-Allow-Credentials: true'というレスポンスヘッダを返す必要がある。

#まとめ
クッキー等認証用ヘッダを用いるクロスオリジンリクエストは書きを満たす必要がある。

  • withCredentialsをtrueにする
  • レスポンスヘッダとしてAccess-Control-Allow-Credentials: trueを返す

#参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?