欢迎大家来到IT世界,在知识的湖畔探索吧!
CSRF是什么?
CSRF(Cross-site request forgery)的中文意思是跨站请求伪造,有时也被写作XSRF。CSRF攻击可以理解为:攻击者盗用了你的身份,以你的名义发送恶意请求,比如发送邮件和消息,购买商品或转账等。
CSRF攻击在2000年在国际上被提出,2006年国内开始关注。很多大型网站都曾经爆出CSRF漏洞,即使在现在,互联网上的许多站点也都对此毫无防备。下面我们来看一下CSRF的攻击过程。
CSRF攻击过程
假如某游戏网站的虚拟币转账是采用GET请求来操作的:
http://www.game.com/Transfer.php?toUserId=11&vMoney=1000
欢迎大家来到IT世界,在知识的湖畔探索吧!
上面的请求表示向Id为11的用户转账1000个虚拟币。
恶意攻击者构建另外一个网站页面,诱导用户打开,页面一打开就自动访问攻击链接:
<img src=’攻击链接’>,攻击链接就执行向攻击者的账户转账的操作。
欢迎大家来到IT世界,在知识的湖畔探索吧!http://www.game.com/Transfer.php?toUserId=20&vMoney=1000 #20为攻击者的账号ID
攻击过程如下:
- 浏览器已经验证并登陆了www.game.com网站,此时浏览器保存了该网站 cookie
- 浏览器打开另一个tab页访问恶意攻击者的网站,并从恶意攻击者的网站构造的链接来访问www.game.com网站
- 浏览器会携带游戏网站的cookie,这样GET请求可以成功操作,被攻击者一下就被转走了1000个虚拟币
CSRF攻击
欢迎大家来到IT世界,在知识的湖畔探索吧!
要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1.登录受信任网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。
也许你会觉得攻击者也没有这么容易得逞,但我们很难保证以下情况不会发生:
- 不能保证登录了一个网站后,不再打开另外一个tab页访问其他网站。
- 不能保证关闭浏览器以后,本地的Cookie会立刻过期。
- 所谓的攻击网站,可能并不是恶意网站,而是经常被人访问的正常网站,只不过因为存在漏洞而被攻击者利用了。
CSRF攻击与XSS攻击的区别
前文《什么是XSS攻击,我们又该如何防范?》介绍了XSS攻击,同样也是在浏览器上执行恶意代码,但两者之间还是有着本质区别。
XSS攻击是用户过分信任网站,放任地址栏中的代码在自己的浏览器执行。
CSRF攻击是网站过分信任用户,放任来自通过访问控制机制的合法用户的请求,来执行网站的功能。
那么该如何防范CSRF攻击呢?
如何防范CSRF攻击
1. 尽量使用POST,限制GET
GET接口太容易被拿来做CSRF攻击,接口最好限制为POST使用,降低攻击风险。当然POST也不是万无一失,攻击者可以构造一个form来进行攻击。
2. 浏览器Cookie策略
Cookie分为Session Cookie和第三方Cookie(Third-party Cookie),前者在浏览器关闭后,就会失效,后者只有到了Exprie时间后才会失效,因此更容易被利用来攻击。
部分浏览器的Cookie策略会拦截第三方Cookie(Third-party Cookie)的发送,但包括Chrome在内的很多浏览器都不会拦截,因此通过浏览器Cookie策略来防御CSRF攻击也不是完全靠谱。另外如果网站返回的HTTP头包含P3P Header,那么也允许浏览器发送第三方Cookie。
3. 加验证码
验证码可以强制用户与应用进行交互,才能完成最终请求,验证码能很好地遏制CSRF攻击。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。
4. Referer Check
Referer Check也可以被用于检查请求是否来自合法来源,比如Referer值是否是指定页面,或者指定域,如果都不是,那么很可能是CSRF攻击。但是服务器并不是任何时候都能取到Referer值,所以也无法作为CSRF防御的主要手段。
5. Anti CSRF Token
现在业界对CSRF的防御,比较常用的做法就是使用一个Token(Anti CSRF Token)。
Anti CSRF Token的工作原理如下:
- 用户访问某个表单页面。
- 服务端生成一个Token,放在用户的Session或浏览器的Cookie中。
- 在页面表单附带上Token参数。
- 用户提交请求后, 服务端验证表单中的Token是否与用户Session中的Token一致,如果一致为合法请求,不一致则认为是非法请求。
这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。使用Token时尽量将操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。
不过需要注意的是:CSRF的Token仅仅用于对抗CSRF攻击。当网站同时存在XSS漏洞时候,那这个方案也避免不了攻击,XSS漏洞应该使用XSS的防御方案予以解决。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/130328.html