葉っぱ日記スマートフォン用の表示で見る葉っぱ日記この広告は、90日以上更新していないブログに表示しています。(2014-02/07)XMLHttpRequestを使うことで、Cookieやリファラ、hidden内のトークンを使用せずにシンプルにCSRF対策が行える。POSTするJavaScriptは以下の通り。リクエストヘッダに自身のURLを設定している。サーバ側では送られてきた内容について、以下を検査する。(2013/03/04追記。リクエストヘッダが付与されていること。リクエストヘッダの値が、想定しているHTMLページのアドレスであること。リクエストヘッダがついていない。示されるURLとオリジンが同一(想定しているHTMLページのオリジン)であること。以上の条件を満たす場合、CSRFではない正規のリクエストとして処理を続行してよい。X-From:ヘッダを付与することはできない。罠ページ内からXHRを経由してリクエストを発行した場合には、Origin:ヘッダが罠サイトのオリジンを示す。これらにより、リクエストが正規の手続きを経て発行されたものか、罠ページから発行されたものかをサーバ側では判断できるという仕組みである。この方式によるメリットはCookieやhiddenによるトークンを使用せず、サーバ側でセッション機構が不要Captchaやパスワード再入力のような、ユーザーにとっての面倒くさい手続きが不要Cookie、Captcha、hiddenによるトークンのような「秘密の情報」を使用しないので、ネットワーク上で盗聴されてもCSRFされることがない*2Cookieを使用しないので、クッキーモンスターの影響を受けない。リファラを使用しないので、リファラを送信しない環境でも利用可能。一方でデメリットとしては、JavaScriptが必須ということである。IE6-IE9を見捨てるのであれば、フォームのHTMLを設置するサイトとPOST先サイトを別のオリジンに配置するその場合に、Cookieやセッションの引き継ぎなどが不要というメリットもある。(2013/03/03追記:もちろんサーバ側はpreflightリクエストに対応する必要がある。2013/03/05修正:IE8->IE9)ただし、こういう実装を実際には見たことがないので、私が想定できていないような落とし穴があるのかもしれない(これ書いてる今、すごく眠たいし)。Chromeでは同一オリジンでもPOSTではOrigin:ヘッダが付与される*2:ネットワーク上で攻撃者が改ざんできる場合はもちろんCSRFされる可能性がある。月別アーカイブ参加グループWindows開発者はてなブログをはじめよう!hasegawayosukeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。