Web安全之CSRF攻击

Posted 给产品经理讲技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web安全之CSRF攻击相关的知识,希望对你有一定的参考价值。

CSRF(Cross Site Request Forgery),中文是跨站点请求伪造的意思。简单的说,它就是网站A对用户建立信任关系后,在网站B上利用这种信任关系,跨站点向网站A发起一些伪造的用户操作请求,以达到攻击的目的。


举个栗子吧,网站A是一家银行的网站,它有一个转账的接口是

http://www.bankA.com/api/transfer?toID=12345678&cash=1000

表示向ID为12345678的目标账户转账1000元。当然这个接口不能被随意调用,它只允许通过了账号验证的用户调用。


在这个时候,果果开发了一个新的网站B,在网站B的首页中,我写入了这样的一句话

<img style="width:0;" line-height: 25.6px; white-space: pre-wrap;">http://www.bankA.com/api/transfer?toID=12345678&cash=1000"/>

这是一行网页的代码,表示这里有一个宽为0的图片,它并不会占据显示空间,但是它会触发浏览器自动加载它的资源,也就是src对应的连接。


所以,如果一个用户成功登录过网站A,短时间内他仍然属于通过身份验证的用户,这个时候他访问了网站B的首页。浏览器的加载到那张特殊图片时,会自动请求一次图片资源,也就请求了一次转账的接口,同时又因为这个用户的身份通过了网站A的验证,所以导致用户的存款帐户向ID为12345678的目标账户转账1000元。更可怕的是,他每打开一次网站B,就会被转走1000元。这就是CSRF攻击的一个简单栗子。


CSRF攻击的本质原因,就是服务器对于浏览器过于信任,相信从该浏览器发出的请求都是正确的,却没有区分这是用户主动发送的请求,还是模拟用户行为发出来的。


所以,我们解决CSRF攻击的手段,就是要区分出这次请求是通过真正用户行为发起的。果果给出了几条防御CSRF的建议:

  1. 关键数据操作的请求,最好使用POST请求,限制GET请求的数据。这样规避了默认拉取资源的带来的影响,前面举的img标签的栗子就是在GET请求下执行的。

  2. 关键数据操作时,加上验证码验证用户身份的流程,这样的话,可以减少机器人自动提交POST请求的机会,毕竟破解验证码不是一件简单的事。

  3. 如果嫌弃验证码影响用户体验,可以尝试Anti CSRF token的方式,就是在真正的表单页面里,隐藏一个随机的每次都变化的token,当用户提交表单时,将这个token提交到后台,进行验证,如果验证通过就执行操作。在CSRF攻击的情况下,网站B是拿不到网站A表单里的token的,所以服务器可以快速的验证出有效的请求。


以上是关于Web安全之CSRF攻击的主要内容,如果未能解决你的问题,请参考以下文章

Web安全之CSRF攻击

Web安全之CSRF攻击

Web安全之CSRF攻击

Web安全之CSRF攻击的防御措施

Web前端安全策略之CSRF的攻击与防御

WEB安全之CSRF