CSRF浅析
CSRF浅析 什么是CSRF Cross-site request forgery,跨站请求伪造. 简单的攻击样例 小明访问并且登录了网站A 小明访问坏人的网站B,网站B上存在一些网站A的请求(GET或者POST) 一个简单的get请求可以利用img的src属性: <img src="http://example.com/get?xxx=xxx"> 访问时触发了请求,此时由于请求中携带着相关的cookie信息,所以网站A是会通过这些非法的请求的,也就是跨站(在黑客网站B)请求伪造. 预防 referer验证 这是一种不安全的校验方法 校验原理 对于网络请求,在header里面存在着referer属性,这个属性标识出请求的来源网站,所以我们可以通过验证referer来预防csrf攻击 存在问题 对于某些浏览器来说,这个属性可能为空 referer可以轻易地伪造 从搜索引擎跳转时,referer是搜索引擎,所以可能需要维护一个白名单 双提交cookie 较为安全 实现 对于每一个网络请求,在提交请求时,在js中将cookie中的某些值(可以是单独生成的token或者用户标志灯)添加到header上提交,在后台去校验是否存在token以及是否与cookie的值相匹配 原理 当你在访问坏人的网站B时,同时提交的仅仅只有cookie,而你在正常访问时,提交时会在header中添加csrftoken. 问题 其实也不能算是问题吧,如果你的网络请求是统一到一个方法里面执行的,例如说ajax或者dwr,那么就可以很方便地修改,但是如果不是的话,那么修改的工作量可能就有点大了. 参考 https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0 https://zh.wikipedia.org/wiki/HTTP%E5%8F%83%E7%85%A7%E4%BD%8D%E5%9D%80 https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html