有什么需要使用将CSRF令牌名称和值放在标记内:
例如:
我已经阅读了关于将CSRF值保留在cookie中的概念,但没有找到保留在标记内的原因.
要防止CSRF,您需要一个随恶意站点无法发送的请求一起提交的值.身份验证cookie不适用,因为如果攻击者可以让浏览器向受害者站点发送请求,则会自动提交cookie.
例如,通过包含的JavaScript提交表单www.evil.com
来攻击用户的会话www.example.com
:
<form method="post" action="https://www.example.com/executeAction"> <input type="hidden" name="action" value="deleteAllUsers"> </form> <script>document.forms[0].submit()</script>
存储页面内的反CRSF令牌是OWASP防止其他网站提交表单,如用户会话的随机令牌推荐的解决方案不能被读取www.evil.com
由于同源策略阻止的JavaScript上www.evil.com
阅读的页面内容www.example.com
.
这些令牌可以存储在页面内的任何位置.最常见的是它将在隐藏的表单字段中,但它们也可以存储在HTML 5数据属性中.似乎使用meta
标签只是另一种存储方式,JavaScript可以在页面提交的任何形式提交中包含它.
CSRF令牌通常以隐藏表单字段的形式出现.如果您使用JavaScript,将它们放在元标记中才有意义.JavaScript可以从元标记中读取标记并将它们发布到动作中.
您不希望在cookie中放置CSRF令牌,因为无论其来源如何,都会从Web浏览器向特定网站发送每个请求的cookie.唯一的例外是安全cookie,它应该遵循同源策略.