CSRF攻击

什么是CSRF?

  CSRF(Cross Site Request Forgery 跨站域请求伪造),是一种对网站的恶意利用,他通过伪装来自受信任用户的请求来利用受信任的网站,与XSS攻击相比,CSRF不大流行且难以防范。

  CSRF能够做到:以你的名义发送邮件、发消息、盗用账号、购买商品、转账等等。

  造成的问题包括:个人隐私泄露和财产安全。

  原理

   由上可知,要完成一次CSRF攻击,必须满足两个条件

  • 登录受信任的网站A,并在本地生成cookie
  • 在不登出A的情况下访问危险网站B(关闭浏览器本地cookie不一定会过期)

   

GET类型的CSRF

  get类型的CSRF一般这样利用,用户在访问了含有这个<img src=http://wooyun.org/csrf?xx=11 />的页面后,成功向wooyun网站发出了一次http请求,如果该网址为存在get型的CSRF地址,则完成了攻击。

POST类型的CSRF

  post类型的CSRF通常使用一个自动提交的表单,访问该页面后,表单自动提交,相当于模拟用户完成一次post操作。如下

<form action=http://wooyun.org/csrf.php method=POST>
<input type="text" name="xx" value="11" />
</form>
<script> document.forms[0].submit(); </script>

如何防御CSRF?

  • 验证HTTP Referer字段

   http头中有个referer字段,记录了该http请求的来源地址。如果存在安全网站A,攻击网站B。A限制了在访问A的时候必须要先访问C网站(如登录验证),即A只有在referer字段值为C域名才可放行,用户再打开B网站时,对A发起了一次CSRF攻击,A识别到referer是B域名,则可拒绝请求。

  缺点:此方法需要依赖浏览器来保障,某些浏览器(IE6、FF2)可支持篡改referer值。

  • 在请求地址中添加token并验证

  在http请求中以参数形式加上一个token,并在服务端验证这个token,如果请求中没有token或token不正确,则可以认为是CSRF攻击而拒绝该请求。这个方法比检查referer安全。

  缺点:黑客网站可以通过referer来得到这个token值发起csrf攻击。

  • 在http头中自定义属性并验证

  不再将token放在http的请求参数中,而将token放至自定义的http头中。

  缺点:此方法需要通过XMLHttpRequest请求,如果没有进行CSRF防御的遗留系统如果要用此方法,需要改写整个网站。

以上总结参考https://mp.weixin.qq.com/s/vfzakMKJYb51k1v7b04A3Q

原文地址:https://www.cnblogs.com/smallzhen/p/12677016.html