Java-如何防范CSRF攻击

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net

CSRF(Cross-Site Request Forgery),中文名称:跨站请求伪造,也被称为:one click attack / session riding,缩写为:CSRF/XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。
XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(攻击的条件要求高)和难以防范,所以被认为比XSS更具危险性。

如何防范CSRF攻击?

一、CSRF攻击的原理
要完成一次CSRF攻击,必须依次完成4个步骤:
1、登录受信任网站网站A,比如是某银行网站,你去查账,该网站会在本地生成Cookie。
2、在不登出某银行网站A的情况下,或者关闭网页但是Cookie没有过期的时候,去访问危险网站B。
3、危险网站B,做了一些马脚,它在网页上放了一个图片<img src="银行网站A转账请求链接">,访问时就会自动发出一个GET类型的转账请求向银行网站A,或者是通过<iframe>发送了一个POST转账请求的表单向银行网站A,它会带着之前没有失效的银行网站A的Cookie。
4、银行网站A收到该请求,验证Cookie通过,发起转账。然后你的钱就不见了。
CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!

二、如何CSRF防御
CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。下面说几种比较常用的解决方法:
1、验证码
这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,或则重要业务请求要短信验证码等,这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,对于用户体验也非常差。
2、Referer Check
Referer Check在Web最常见的应用就是“防止图片盗链”。同理,Referer Check也可以被用于检查请求是否来自合法的“源”(Referer值是否是指定页面,或者网站的域),如果都不是,那么就极可能是CSRF攻击。但是因为服务器并不是什么时候都能取到Referer,所以也无法作为CSRF防御的主要手段。但是用Referer Check来监控CSRF攻击的发生,倒是一种可行的方法。
3、Anti CSRF Token
现在业界对CSRF的防御,一致的做法是使用一个Token(Anti CSRF Token)。
原理:
用户访问某个表单页面。服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。在页面表单附带上Token参数。用户提交请求后,服务端验证表单中的Token是否与用户Session(或Cookie)中的Token一致,一致为合法请求,不一致则是非法请求。
这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>