CSRF(Cross-site request forgery)跨站请求伪造,也被称为「One Click Attack」或者「Session Riding」,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同,XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。与 XSS 攻击相比,CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比 XSS 更具危险性。
攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。
例如:一个网站用户 Bob 可能正在浏览聊天论坛,而同时另一个用户 Alice 也在此论坛中,并且后者刚刚发布了一个具有 Bob 银行链接的图片消息。设想一下,Alice 编写了一个在 Bob 的银行站点上进行取款的 form
提交的链接,并将此链接作为图片 src
。如果 Bob 的银行在 Cookie 中保存他的授权信息,并且此 Cookie 没有过期,那么当 Bob 的浏览器尝试装载图片时将提交这个取款 form
和他的 Cookie,这样在没经 Bob 同意的情况下便授权了这次事务。
CSRF 是一种依赖 Web 览器的、被混淆过的代理人攻击(deputy attack)。在上面银行示例中的代理人是 Bob 的 Web 浏览器,它被混淆后误将 Bob 的授权直接交给了 Alice 使用。
下面是 CSRF 的常见特性:
- 依靠用户标识危害网站
- 利用网站对用户标识的信任
- 欺骗用户的浏览器发送 HTTP 请求给目标站点
- 另外可以通过
img
标签会触发一个 GET 请求,可以利用它来实现 CSRF 攻击。
解决方法:
由于 CSRF 攻击不访问 A 网站前端,所以可以在 A 网站前端页面加入验证信息来防范攻击(如验证码、token、referer 等)。