为什么要在POST请求中要求CSRF令牌呢?
我的理解是CSRF阻止攻击者使用 <img>
标记让受害者的浏览器发送一个使用会话cookie进行身份验证的请求 . 鉴于 <img>
总是使用GET请求而不是POST提交,那么为什么在POST请求中需要CSRF令牌呢?
此外,攻击者无法在不能运行代码(即XSS攻击)的情况下在网页中提交表单,在这种情况下,他们无论如何都可以绕过您的CSRF保护 .
回答(3)
做了一些进一步的调查:
攻击者可能在他们自己的站点上托管 <form>
,该站点提交到目标站点(您的站点) . 他们所需要做的就是让受害者提交此表格,并将提交他们的cookies以及可能的身份验证 .
攻击者也有可能向您的站点注入一个 <iframe>
,然后就可以显示这个恶意的 <form>
.
我认为token-based approach对我的用例来说是更好的解决方案 .
2 years ago
攻击者可以在自己的站点上托管表单,但不要求用户提交表单 . 他们可以使用JavaScript来执行此操作:
IFrame注入更多的是一个XSS漏洞 . XSS漏洞比CSRF漏洞更严重,因为可以造成更多损害,并且它将始终覆盖您拥有的任何CSRF保护 . 确保始终正确编码输出所在上下文的输出(例如,编码为HTML或适用于JavaScript) .
查看Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet - 他们最好的建议是使用同步器令牌模式,它似乎与_2777763中的链接类似,但可以与cookie结合使用 .
此外,这里是XSS (Cross Site Scripting) Prevention Cheat Sheet的链接 .