h4c

ただのメモ

CORSメモ

XHR2

送信側

JS:

var xhr2 = new XMLHttpRequest();
xhr2.open("GET", "https://api.example.jp/xhr/");
xhr2.setRequestHeader("X-CSRF-Token", "r4nd0MStr1ng");
xhr2.withCredentials = "true";
xhr2.send

同一OriginでもXSSが無いとも限らないから付けとけば安心かな。

HTTP Request Header:

GET http://api.example.jp/xhr HTTP/1.1
X-CSRF-Token: r4nd0MStr1ng
Origin: http://example.jp
Cookie: session=hutsunosessionid

受信側

HTTP Response Header:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.jp
Access-Control-Allow-Credentials: true

WebSocket

var ws = new WebSocket("wss://api.example.jp");
ws.send("msg");
GET https://api.example.jp/ HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: api.example.jp
Origin: https://example.jp
Sec-WebSocket-Key: c2Vjd2Vic29ja2V0a2V5ZGF5bw==

必ずサーバ側でOriginヘッダを検証する。 ※ホスト名は完全一致で検証する。さもないとサブドメインとか@とかで抜けられる。

  • 備考:AngularJSの$httpでカスタムヘッダを付けて送る方法
 myModule.config(function($httpProvider) {
   $httpProvider.defaults.headers.common['X-CSRF-Token'] = 'r4nd0MStr1ng';
 });
  • SockJS socket management service

https://gist.github.com/snj/9500488