如何杜绝跨站请求伪造?
1.要让服务器知道本次请求是不是冒用了用户的身份→
2.服务器发给用户一个凭证,用户请求时需携带此凭证→
3.此凭证只能用户看到而且冒用者看不到→
4.这就用到了浏览器的安全机制(同源策略).比如
1.js不能访问本页面其他域的iframe(试图访问,chrome会报错Blocked a frame with origin "null" from accessing a cross-origin frame)
2xhr对象不能跨域请求
3.js不能访问其他窗口的内容(窗口A定义变量var a,在窗口B访问a(若窗口B没有定义变量a),会是undefined)
5.不要把关键的请求的动作放在URI中,因为如果用户点击了恶意者发过来的链接就会被坑.
5.因此要把此秘钥放在用户发起请求所在的页面中(header,input),其他域引用的js脚本无权访问这个页面的内容.
6.发起请求绝对不能是get,放在
7.在服务器端,把此秘钥存在SESSION里.或在浏览器端,存在COOKIE里,但一定设置为http-only,防止其他域的脚本偷看此COOKIE
8.在服务器端,对header或input的秘钥值与cookie或session的秘钥对比
疑问,为何放在cookie中多此一举,就算http only,万一cookie被攻陷了怎么办?链接
OK了