CSRF攻击及防范

CSRF是什么

CSRF中文是跨站点请求伪造。也就是在受害者访问一个网站时,如果当前网站的cookie还没有过期的情况下,攻击者诱使用户访问一个攻击页面,以用户身份在攻击页面发起伪造用户操作的请求。简单来说就是:攻击者盗用了你的身份,以你的名义发送恶意请求。

常见的攻击类型

GET类型的CSRF

例子

假如CSDN有一个加关注的GET接口,例如

http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=4e8c33d0-77fe-df11-ac81-842b2b196315

然后只需要在博文内容里面写上一个img标签

<img style="width:0;" src="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=4e8c33d0-77fe-df11-ac81-842b2b196315"   />

这样只要有人打开这篇博文,就会自动关注我。

POST类型的CSRF

如静态或动态的创建一个form表单,当用户访问到这个恶意网站时,就会提交这个表单。

假如目标网站A上有写文章的功能,那我们就可以动态创建form标签,修改文章的题目。

www.b.com/csrf.html

function setForm () {
    var form = document.createElement('form')
    form.action = 'www.a.com/blog/article'
    form.methods = 'POST'
    var input = document.createElement('input')
    input.type = 'text'
    input.value = 'csfr攻击啦!'
    input.id = 'title'
    form.appendChild(input)
    document.body.appendChild(form)
    form.submit()
}
setForm()

以上代码可以看出,动态创建表单,然后调用submit方法。就可以以通过跨域的伪造请求来实现修改目标网站A的某篇文章的标题了。

欺骗的流程大致是:

  1. 首先欺骗用户登录目标网站。
  2. 然后欺骗用户登录恶意网站。这种恶意的网站有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务器端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。

CSRF防范

  • 尽量使用POST,限制GET
    GET接口太容易被拿来做CSRF攻击,看第一个示例就知道,只要构造一个img标签,而img标签又是不能过滤的数据。接口最好限制为POST使用,GET则无效,降低攻击风险。
    当然POST并不是万无一失,攻击者只要构造一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。

  • Referer Check
    Referer Check在Web最常见的应用就是“防止图片盗链”。同理,Referer Check也可以被用于检查请求是否来自合法的“源”(Referer值是否是指定页面,或者网站的域),如果都不是,那么就极可能是CSRF攻击。
    但是因为服务器并不是什么时候都能取到Referer,所以也无法作为CSRF防御的主要手段。但是用Referer Check来监控CSRF攻击的发生,倒是一种可行的方法。

  • Anti CSRF Token
    现在业界对CSRF的防御,一致的做法是使用一个Token(Anti CSRF Token)。

例子:

  1. 用户访问某个表单页面。

  2. 服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。

  3. 在页面表单附带上Token参数。

  4. 用户提交请求后, 服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,一致为合法请求,不是则非法请求。

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

总结

CSRF攻击是攻击者利用用户的身份操作用户帐户的一种攻击方式,通常使用Anti CSRF Token来防御CSRF攻击,同时要注意Token的保密性和随机性。

本文参考:http://www.cnblogs.com/lovesong/p/5233195.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值