
攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的 *** 作行为。
CSRF攻击防范手段有哪些?
第一、验证HTTP Referer字段
HTTP头中的Referer字段记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,而如果黑客要对其实施CSRF攻击,他一般只能在他自己的网站构造请求。因此,可以通过验证Referer值来防御CSRF攻击。
第二、使用验证码
关键 *** 作页面加上验证码,后台收到请求后通过判断验证码可以防御CSRF。但这种方法对用户不太友好。
第三、在请求地址中添加token并验证
CSRF攻击之所以成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于cookie中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的cookie来通过安全验证。要抵御CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于cookie中。可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。这种方法要比检查Referer要安全,token可以在用户登陆后产生并放于session中,然后在每次请求时把token从session中拿出,与请求中的token进行比对,但这种方法的难点在于如何把token以参数的形式加入请求。
对于get请求,token将附在请求地址之后,这样URL就变成:http://url?csrftoken=tokenvalue。
对于post请求,要在form的最后加上<input type="hidden" name="csrftoken" value="tokenvalue"/>,这样就把token以参数的形式加入请求了。
第四、在HTTP头中自定义属性并验证
这种方法也是使用token并进行验证,和上一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了上种方法在请求中加入token的不便同时,通过XMLHttpRequest请求的地址不会被记录到浏览器的地址栏,也不用担心token会透过Referer泄露到其他网站中去。
CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。防御手段:
验证请求来源地址;
关键 *** 作添加验证码;
在请求地址添加 token 并验证。
防御CSRF攻击的三种策略:1. 基于请求验证:使用验证码和其他动态参数验证请求;
2. 基于会话验证:增加更多的会话验证,解决跨域请求;
3. 基于权限验证:增加更多的权限验证,如用户角色授权,请求白名单等。
拓展:
4. 通过HTTP头部的Referer和Origin验证请求来源;
5. 使用HTTP头部的Cookie和X-XSRF-Token验证请求;
6. 禁用GET请求中的参数,将CSRF防护的优先级放在POST请求上;
7. 请求发送前添加一个时间戳参数,在服务端验证请求时间是否过期;
8. 使用非对称加密技术,添加一个签名参数,再服务端进行签名验证;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)