CSRF攻击是什么?有哪些防范措施?

CSRF攻击是什么?有哪些防范措施?CSRF 攻击可以理解为 攻击者盗用了你的身份 以你的名义发送恶意请求 比如发送邮件和消息 购买商品或转账等

欢迎大家来到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

攻击过程如下:

  1. 浏览器已经验证并登陆了www.game.com网站,此时浏览器保存了该网站 cookie
  2. 浏览器打开另一个tab页访问恶意攻击者的网站,并从恶意攻击者的网站构造的链接来访问www.game.com网站
  3. 浏览器会携带游戏网站的cookie,这样GET请求可以成功操作,被攻击者一下就被转走了1000个虚拟币
CSRF攻击是什么?有哪些防范措施?

CSRF攻击



欢迎大家来到IT世界,在知识的湖畔探索吧!

要完成一次CSRF攻击,受害者必须依次完成两个步骤

1.登录受信任网站A,并在本地生成Cookie。

2.在不登出A的情况下,访问危险网站B。

也许你会觉得攻击者也没有这么容易得逞,但我们很难保证以下情况不会发生

  1. 不能保证登录了一个网站后,不再打开另外一个tab页访问其他网站。
  2. 不能保证关闭浏览器以后,本地的Cookie会立刻过期。
  3. 所谓的攻击网站,可能并不是恶意网站,而是经常被人访问的正常网站,只不过因为存在漏洞而被攻击者利用了。

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的工作原理如下:

  1. 用户访问某个表单页面。
  2. 服务端生成一个Token,放在用户的Session或浏览器的Cookie中。
  3. 在页面表单附带上Token参数。
  4. 用户提交请求后, 服务端验证表单中的Token是否与用户Session中的Token一致,如果一致为合法请求,不一致则认为是非法请求。

这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。使用Token时尽量将操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。

不过需要注意的是:CSRF的Token仅仅用于对抗CSRF攻击。当网站同时存在XSS漏洞时候,那这个方案也避免不了攻击,XSS漏洞应该使用XSS的防御方案予以解决。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/130328.html

(0)
上一篇 21分钟前
下一篇 8分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信