为什么CSRF令牌应该在元标记和cookie中?

 vfh1150403 发布于 2023-01-30 11:24

有什么需要使用将CSRF令牌名称和值放在标记内:

例如:



我已经阅读了关于将CSRF值保留在cookie中的概念,但没有找到保留在标记内的原因.

2 个回答
  • 要防止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可以在页面提交的任何形式提交中包含它.

    2023-01-30 11:26 回答
  • CSRF令牌通常以隐藏表单字段的形式出现.如果您使用JavaScript,将它们放在元标记中才有意义.JavaScript可以从元标记中读取标记并将它们发布到动作中.

    您不希望在cookie中放置CSRF令牌,因为无论其来源如何,都会从Web浏览器向特定网站发送每个请求的cookie.唯一的例外是安全cookie,它应该遵循同源策略.

    2023-01-30 11:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有