CSRF 攻击:跨站请求伪造
跨站请求伪造 CSRF (Cross-site request forgery),是一种挟制用户在当前已登录的 Web 应用程序上执行非本意操作的攻击方法。
它利用用户已经登录的身份信息,在用户无感的情况下,以用户的名义完成操作。
攻击流程
一次 CSRF 攻击发生的过程可能是这样:
我们来简述一下图示流程:
A. 用户 A 登录购物网站 http://www.example.shop,并获取到 cookie。
B. 攻击者事先知道该购物网站完成一次购物操作的URL,因此事先将脚本注入页面,例如:
<img src="http://www.example.shop/buy?productId=00010&count=10&address=example">
C. 在用户 A 没有登出购物网站(即cookie未失效)的情况下,访问了攻击者网站。此时攻击者网站会返回具有恶意脚本的页面,伪造用户发送请求到服务器。
由此可知,攻击关键就是欺骗用户浏览器,让其以用户的名义发出请求,进行操作。
攻击演练
下面我会通过开启两个服务, http://localhost:3000/模拟购物网站,http://localhost:4000/模拟黑客网站
A. 模拟用户登录购物网站,获取 cookie 信息
B. 模拟用户访问黑客网站,黑客网站中事先注入了攻击脚本:
刷新购物网站,发现被攻击了:
危害
利用用户登录态,用户不知情情况下进行操作:
- 可盗取用户资金,进行转账消费等操作
- 可冒充用户发帖、进行恶意言论等
防御措施
-
设置 Referer 字段
Referer 请求头标识当前请求是从哪个页面发送过来的,服务端可根据该地址判断出是否是恶意请求。
局限性:完全依赖于浏览器发送正确的 Referer 字段,我们无法保证浏览器内部对 Referer 的实现。
-
通过