JavaScriptでドメインを超えたデータのやりとりを行う場合のブラウザに求められるクロスサイトのアクセス制限の種類
FORM | 制限なし(制限する場合はCSRF対策が必要) |
---|---|
SCRIPT | 制限なし(JSONPへの応用が可能) |
IMG | インライン表示はできるが、SCRIPTから画像の中身は読めない |
CSS | レンダリングできるがSCRIPTから中身は読めない |
IFRAME | クロスサイトのDOM操作を禁止 |
XMLHttpRequest | クロスサイトのリクエストを発行できない |
XMLHttpRequest Level 2 | クロスサイトのリクエストを条件付きで許可 |
http://labs.cybozu.co.jp/blog/kazuho/archives/2007/01/crosssite_security.php
XMLHttpRequest Level 2について
XMLHttpRequest Level 2に対応しているブラウザで外部サイトに対してXMLHttpRequest通信を行うと、ブラウザから送られるHTTPリクエストにOriginヘッダが付加される。Originヘッダにはドメイン名が設定される。
サーバー側から返されるHTTPレスポンスのAccess-Control-Allow-Originヘッダにアクセスを許可するリクエスト送信先のドメインを指定する。
XMLHttpRequest Level 2に対応しているブラウザは、Access-Control-Allow-Originヘッダの内容を確認して、それが現在のリクエスト送信元のドメインと一致している場合にのみ、レスポンスを受け取る。
通常は.htaccessなどでAccess-Control-Allow-Originヘッダに許可するドメインを羅列するが、その値に*を指定すると、すべてのドメインから利用できるようになる。