Lavarel 跨站请求伪造 CSRF
简介
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。
可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。
攻击思路
XSS:攻击者发现XSS漏洞 > 构造代码 > 发送给受害人 > 受害人打开 > 攻击者获取受害人的cookie > 完成攻击
XSS容易发现,因为攻击者需要登录后台完成攻击。管理员可以看日志发现攻击者。
CSRF:攻击者发现CSRF漏洞 > 构造代码 > 发送给受害人 > 受害人打开 > 受害人执行代码 > 完成攻击
CSRF攻击一直是管理员自己实现的,攻击者只负责了构造代码。CSRF少了一个获取受害人的cookie的步骤,受害人在执行代码的时候就已经完成的攻击,而攻击者并没有参与进来。
攻击类型
在跨站请求伪造(CSRF)攻击里面,攻击者通过用户的浏览器来注入额外的网络请求,来破坏一个网站会话的完整性。而浏览器的安全策略是允许当前页面发送到任何地址的请求,因此也就意味着当用户在浏览他/她无法控制的资源时,攻击者可以控制页面的内容来控制浏览器发送它精心构造的请求。
- 网络连接
如果攻击者无法直接访问防火墙内的资源,他可以利用防火墙内用户的浏览器间接的对他所想访问的资源发送网络请求。甚至还有这样一种情况,攻击者为了绕过基于IP地址的验证策略,利用受害者的IP地址来发起他想发起的请求。 - 获知浏览器的状态
当浏览器发送请求时,通常情况下,网络协议里包含了浏览器的状态。这其中包括很多,比如cookie,客户端证书或基于身份验证的header。因此,当攻击者借助浏览器向需要上述这些cookie,证书和header等作验证的站点发送请求的时候,站点则无法区分真实用户和攻击者。 - 改变浏览器的状态
当攻击者借助浏览器发起一个请求的时候,浏览器也会分析并相应服务端的response。如果服务端的response里包含有一个Set-Cookie的header,浏览器会相应这个Set-Cookie,并修改存储在本地的cookie。
登陆CSRF攻击
攻击者利用用户在可信网站的用户名和密码来对网站发起一个伪造请求。一旦请求成功,服务器端就会响应一个Set-Cookie的header,浏览器接收到以后就会建立一个session cookie,并记录用户的登陆状态。这个session cookie被用作绑定后续的请求,因而也可被攻击者用来作为身份验证。
例如:搜索记录
受害人访问攻击者的网站,攻击者向谷歌伪造一个跨站点请求的登陆框,造成受害者被攻击者登陆到谷歌。随后,受害者使用搜索的时候,搜索记录就被攻击者记录下来。
包括谷歌和雅虎等很多搜索引擎允许他们的用户选择是否同意保存他们的搜索记录,并且为用户提供一个接口来查看他们自己的私人搜索记录。搜索请求里面包含了用户的行为习惯和兴趣的一些敏感细节,攻击者可以利用这些细节来欺骗用户,盗窃用户的身份或者窥探用户。当攻击者以用户身份登陆到搜索引擎里,就可以看到用户的搜索记录。