您的位置:首页 > 其它

CSRF攻击及预防

2017-07-28 21:12 211 查看
参考博客 :

浅谈CSRF攻击方式

CSRF 攻击的应对之道

1. 概念

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

2. 什么危害

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

3. CSRF漏洞现状

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI……而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

到目前,这也是一些重要站点需要重点防护的攻击,与XSS攻击占有相同的比例。

4. CSRF的原理



5. 实例

一个银行转账的操作作为例子(仅仅是例子,真实的银行网站没这么傻:>)

1. 实例1

银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000

  危险网站B,它里面有一段HTML的代码如下:

  <img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
  


  首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块……

  为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源:

  

  
“http://www.mybank.com/Transfer.php?toBankId=11&money=1000”

  
,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作……

  

2. 实例2

网站该用接受POST请求,但是,攻击者可以利用iframe去构造post请求发给被攻击网站,同样中招。

6. 防御

1. 规范化网站请求方法

GET方法只获取资源,不更改服务器上的内容。

2. 在表单中增加伪随机数,服务同步校验

这是在其他危险页面拿不到信任网站的cookie为前提,否则,依然可以发起攻击。

3. 验证码校验

有的时候,对用户不友好。

4. 验证 HTTP Referer 字段

并不能确保万无一失,因为在一些有漏洞的浏览器,referer可能会被篡改。

5. 在 HTTP 头中自定义属性并验证

和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

然而这种方法的局限性非常大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  csrf web安全