web api csrf

来源:互联网 发布:淘宝宝贝保护不被删除 编辑:程序博客网 时间:2024/06/06 20:56

通过Ajax预防CSRF

除了上述方法,还可以通过Ajax来和服务器通信来减少CSRF的风险。这时候可以考虑在请求的header里加入页面信息来做合法性验证。比如参考如下代码:

1
2
3
4
5
6
7
8
9
10
11
functionpost(){
 
    varxhr =newXMLHttpRequest();
    xhr.open("POST","/create",true);
    …….
    // 在xhr.open方法后,进行header设置。
    xhr.setRequestHeader("X-From", location.href );
    ……
    xhr.send( s );
    returnfalse;
}

服务器端在接收到客户端的请求后,会进行如下处理:

  1. 检查header里的Host是否正确。
  2. 检查是否设置了“X-From”属性,是否是正确的page url的值。
  3. 检查Origin header属性,这个值可以是:
    没有设置;
    或者:如果设置了,则应该和X-From一样。

如果请求满足了所有这些条件,都可以认为是正常的访问。

如果攻击者如果直接通过假页面提交Form,则不能在header里设置X-From属性;而如果攻击者也用Ajax提交,则header里的Origin因为不能伪造,也不能达到攻击的目的。从而达到了预防CSRF的目的。

0 0