CSRF
本文约需 2 分钟阅读
CSRF (Cross-Site Request Forgery,跨站请求伪造) 是指攻击者诱使用户向其已认证的 Web 服务发送攻击者所设计的非法请求的攻击。由于它滥用了用户登录中的服务的认证信息 (Cookie),请求会被当作用户本人操作一样进行处理。它与 XSS 并列,是具有代表性的 Web 应用程序攻击。截至 2025 年,主流框架 (Django、Rails、Next.js) 已默认内置 CSRF 防护,但 API 端点和 SPA 中的实现遗漏仍不断被报告。
现场使用案例
“在漏洞诊断中发现,某电商网站的收货地址变更 API 未实现 CSRF 防护。只要攻击者准备好陷阱页面,就能将登录中用户的收货地址改为任意地址。”
CSRF 攻击的流程
CSRF 的攻击机制
攻击者会准备一个作为陷阱的 Web 页面,并在其中嵌入对用户登录中服务的请求。例如,在登录银行网站的状态下浏览攻击者的页面,浏览器就会自动向银行网站发送转账请求。由于浏览器会自动发送 Cookie,银行网站一方无法将其与正规用户发出的请求区分开来。Web 安全书籍 (Amazon)可帮助你学习攻击的细节。
实际的受害场景
有这样的案例:在登录电商网站的状态下,点击攻击者预先植入的链接,收货地址就会被改成攻击者的地址。此外,也有报告称在登录社交网络时浏览陷阱页面,结果导致非本意的发帖或关注。当它与会话劫持相结合时,危害会进一步加剧。在网上银行中,针对转账操作的 CSRF 防护尤为重要。
防御手法
在开发者一侧,标准做法是将 CSRF 令牌 (随机的唯一值) 嵌入表单,并在请求时进行验证。通过设置 SameSite Cookie 属性,可以限制跨站点的 Cookie 发送。在用户一侧,基本做法是养成在重要操作后退出登录的习惯,并且不点击可疑链接。用强力的随机密码保护账户,并启用多因素认证,可以减轻万一发生时的损害。安全 Web 开发指南 (Amazon)也很有参考价值。
这篇文章对您有帮助吗?