Web安全攻防系列[3]-CSRF及其防范
CSRF(cross site request forgery), 跨站请求伪造。是前端领域仅次于 XSS 的常见漏洞。它在某些时候可以产生强大的破坏性。
什么是 CSRF
攻击者(黑客)诱使用户访问一个页面 A,在页面 A 中使用一些技巧发起对 B 站点的某个请求。即攻击者在 A 站点里伪造了一个请求给 B 站点,这就叫跨站请求伪造。
由于这个伪造过程发生在用户侧的浏览器端,因此默认请求就携带了用户自己浏览器内的凭据信息(例如 cookie 中的登录凭证),因此极其容易用来对网站的敏感接口进行访问,从而给用户带来危害。
攻击手法
- 假设要攻击的目标为 B 站点 www.b.com/api/delete?id=1. 假设 B 站点的该接口可以删掉服务器上 id 为 1 的文章,但前提是用户必须登录了 B 站点
- 攻击思路: 如果用户已经在自己浏览器里登录了,则会话凭据会放置在浏览器内。此时如果诱导用户在该浏览器内访问这个删除文章的地址,就能删掉用户的文章了。 这就是 CSRF 的思路
攻击者首先构造一个 A 站点 www.a.com/welcome.html, 然后在 welcom.html 中加入如下一段加载 img 标签的代码
1
2
3
4
5
6<html>
<head></head>
<body>
<img src="http://www.b.com/delete?id=1" />
</body>
</html>试图引诱目标用户访问 A 站点的 welcome.html 网页
- 用户访问 welcome 页面后,在用户浏览器中会加载页面里的图片(即向图片的 src 属性发起 get 请求)
- 由于 get 请求是在用户端的浏览器进行,因此相当于在浏览器内访问了www.b.com/delete?id=1这个地址。 如果该用户在浏览器内登录过www.b.com,则可能就把用户的文章删除了