【问题标题】:CSRF Token Generation in Javascript with Django使用 Django 在 Javascript 中生成 CSRF 令牌
【发布时间】:2014-07-12 21:19:57
【问题描述】:

我正在使用 Django 后端创建一个 Web 应用程序,但大部分繁重的工作将使用 Javascript 完成。我一直在与一些同事争论使用 javascript 而不是 Django 模板标签生成 CSRF 令牌是否安全。

从我目前所做的研究来看,Django just compares the value 设置在 CSRF_COOKIE 中,而值在 csrfmiddlewaretoken 表单字段中提交。

用javascript生成一个随机的32个字符串并设置表单域值和cookie不安全吗?

【问题讨论】:

    标签: javascript django security web csrf


    【解决方案1】:

    基本上你提出的是Double Submit Cookies CSRF 预防方法的变体。这是有效的,因为攻击者无法在浏览器中为您的域读取或写入 cookie 值,因此无法复制要与表单一起提交的相同值。

    当用户对网站进行身份验证时,该网站应该生成一个(加密性强的)伪随机值

    这是 JavaScript 方法的最大问题 - JavaScript 中的随机数生成器在密码学上并不安全。您可以尝试one of the solutions here - 您的里程可能因浏览器而异。捕获鼠标移动听起来很有趣,但必须小心使用这种方法 - 您需要防止提交任何未检测到的表单,因为在真正的 CSRF 攻击中可能就是这种情况。如果可能的话,尽量避免任何花哨的东西,比如安全性,最好保持简单——复杂性是安全性的敌人。

    【讨论】:

    • 谢谢!我们曾怀疑生成一个密码安全的数字将是这个想法的缺陷,但对我们的怀疑没有足够的信心。我们也不想发现我们错了。
    【解决方案2】:

    我真的很喜欢 SilverlightFox 的解释,但我想我会添加一些评论。您的服务器至少已经参与了第一个请求。借此机会从您的模板中设置一个 javascript 变量,并在页面的生命周期中继续使用它。

    {% extends 'base.html' %}
    
    <script>
        window.csrf_token = "{% csrftoken %}";
    </script>
    

    它避免了在客户端生成令牌的复杂性,但仍然允许您将令牌用于动态创建的任何表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 2014-08-31
      • 2010-12-20
      • 2017-05-27
      • 1970-01-01
      • 2019-04-08
      • 2014-01-21
      • 1970-01-01
      相关资源
      最近更新 更多