##手法
・HTTPヘッダのX-requested-withの値をチェックし、ajaxであることを担保する。
validate_sample.php
private function validateCSRF()
{
if( isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])==='xmlhttprequest'
){
return true; // not csrf
}
return false; // invalid request
}
##理論的背景
SameOriginPolicyより、Ajaxであることはすなわり不正な外部ドメインからのアクセスではない。
上記から、X-requested-withの確認のみでCSRF対策が可能となる。
##考慮事項
・X-requested-withは操作することも可能
・Ajax level2ではクロスドメイン間の通信が可能であるためこの対策は無効
→定石通りワンタイムトークンを用いるのがベターか。