CSRF攻击

1.什么是CSRF攻击

CSRF——cross-site Request Forgery 跨站点请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

2.CSRF攻击过程

--用户A(受害者)正常访问常用网站web1,登陆用户名密码正常访问web1网页

--web2(攻击网站)会诱导用户进入自己的网站,当用户A进入到web2网站,web2会向

web1发送一个请求,浏览器会默认携带cookie信息。

--web1收到请求进行验证,并确认是受害者的凭证,误以为是用户A自己发的请求

--web1以用户A的名义执行了web2发送过来的请求

--攻击完成,web2在用户A不知道的情况下对web1进行攻击,并执行自己自定义的操作

3.防御CSRF攻击方法

(1)验证 HTTP Referer 字段

在http的Request Header 中有一个Referer字段,它记录了该 HTTP 请求的来源地址,服务端对每个请求的Referer值进行验证,如果是本网站的地址,则验证通过。如果是第三方网站地址,则拒绝请求。

验证referer字段的优缺点

优点:

1.比较简单

2.不改变已有代码逻辑,只需要给请求增加前置拦截器进行验证

缺点:

1.因为Referer值是由浏览器提供的,将安全性完全依赖第三方浏览器并不安全。因为有些浏览器,例如:IE6和FF2,目前已有一些方法可以篡改Referer值。

2.即使使用不能随意篡改Referer值的浏览器,这样做还是存在问题,因为Referer值会记录用户访问来源,有些用户认为这样侵犯他们的隐私权,将内部组织机构的信息泄露到外网去。因此用户可以在浏览器中设置发送请求时不再携带Referer值,这样网站会因为请求没有 Referer 值而认为是 CSRF 攻击,拒绝合法用户的访问。

(2)在请求地址中增加token

可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。这种方法相对Referer 比较安全。

(3)在 HTTP 头中自定义属性并验证

与方法2相同都是利用token验证,和方法2不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。
然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行 CSRF 防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。

参考文档:什么是CSRF攻击?如何防御CRSF攻击? - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值