我正在尝试在我的一个项目中使用CSRF令牌实施CSRF保护。我是新手,并且正在阅读有关在请求中向服务器发送CSRF令牌的消息,并且发现建议在GET上发送CSRF令牌作为HTTP POST。我的问题是:
如果HTTP URL在GET请求中公开CSRF令牌,并且潜在的攻击者可以使用此CSRF令牌创建CSRF请求并使用Javascript进行攻击,那么当CSRF令牌存储为隐藏字段时,为什么他不能这样做在一个形式?如果我的网站存在XSS漏洞,则攻击者可以从隐藏字段获取令牌,并将该请求与该令牌一起发送。
提前致谢!!
答案 0 :(得分:1)
这个问题的答案来自Same-Orign Policy。简单地说:恶意网站上的JavaScript无法读取其他网站上的表单内容。就好像StackOverflow.com可以在gmail.com上阅读你的电子邮件一样,谢天谢地这是不可能的。
通过GET发送的CSRF令牌被认为是有害的,因为HTTP引用可能会将数据泄漏到第三方域。为了使其正常工作,攻击者需要嵌入图像或可点击链接。
另请考虑审核CSRF Prevention Cheat Sheet。