在URL中披露CSRF令牌vs在POST请求中包含令牌

我正试图在我的一个项目中使用CSRF令牌实现CSRF保护 . 我是新手,并且正在阅读有关在请求中向服务器发送CSRF令牌的消息,并且发现建议在GET上发送CSRF令牌作为HTTP POST . 我的问题是:

如果HTTP URL在GET请求中公开CSRF令牌,并且潜在的攻击者可以使用此CSRF令牌创建CSRF请求并使用Javascript进行攻击,那么当CSRF令牌作为隐藏字段存储在表单中时,为什么他不能这样做?如果我的站点存在XSS漏洞,则攻击者可以从隐藏字段获取令牌并将该请求与该令牌一起发送 .

提前致谢 !!

回答(1)

2 years ago

这个问题的答案来自Same-Orign Policy . 简单地说:恶意网站上的JavaScript无法读取其他网站上的表单内容 . 就好像StackOverflow.com可以在gmail.com上阅读你的电子邮件一样,谢天谢地这是不可能的 .

通过GET发送的CSRF令牌被认为是有害的,因为HTTP引用可以将数据泄漏到第三方域 . 为了使其工作,攻击者需要嵌入图像或可点击链接 .

另请考虑查看CSRF Prevention Cheat Sheet .