CSRF 概述:
CSRF 就是 Cross Site Request Forgery,跨站请求伪造。这种攻击利用了浏览器端状态(Cookie)管理规则与服务端鉴权规则。CSRF 在攻击过程中不需要获取到用户的登录凭据,而是借用户之手发出恶意请求。
CSRF 的存在是由于 Cookie 架构的设计“非常古老”,已经有些不适应网络安全的需要。但是如下文所述,现代浏览器已经给 Cookie 规则打了很多“补丁”,安全性大大提升。实际上,现代浏览器条件下,很多“传统的” CSRF 攻击手段已经失效,但是由于网络安全的短板效应,永远不能放松警惕,只有深入理解攻击方式的来龙去脉,才能从整体上尽可能确保安全。
另一个 Web 开发者常听说的攻击方式叫 XSS(Cross Site Scripting),跨站脚本,了解它的人应该更多一些。相比而言,CSRF 攻击构造起来可以更简单,更低成本,但是攻击方式更精巧,背后的原理的也更复杂一些。更容易导致混乱的地方在于,不同的攻击方式可能混合出现。比如考虑到 UGC(User-generated content)场景下可能出现的 CSRF,就变得比典型的 CSRF 要复杂。对于整体防御思路来说,是很大的挑战。
狭义上的 CSRF 知识不难理解,但要深入理解就比较繁琐,因为网络安全的事情往往都是很多不同层面的知识互相关联,CSRF 尤其如此。
与 CSRF 关系密切的领域:
- 网络协议
- 浏览器特性
- API设计
- 认证方式
- 密码学
- 社会工程
可见,CSRF 本身不复杂,甚至看起来比较简单,但是每个相关的领域,都是个非常深的坑,本文会尽可能设计到足够广的领域。阅读本文之后,会发现每个领域的知识都有很多可以继续探索的地方。