繁体   English   中英

使用Django使用Javascript生成CSRF令牌

[英]CSRF Token Generation in Javascript with Django

我正在使用Django后端创建Web应用程序,但是大部分繁重的工作将由Javascript完成。 我一直在和一些同事讨论使用JavaScript而不是Django template tag生成CSRF令牌是否安全。

从我到目前为止所做的研究来看, Django似乎只是将 CSRF_COOKIE设置的值与csrfmiddlewaretoken表单字段中提交的值进行了csrfmiddlewaretoken

生成随机的32个字符串并使用javascript设置表单字段值和cookie是否不安全?

本质上,您提议的是Double Submit Cookies CSRF预防方法的一种变体。 之所以可行,是因为攻击者无法在您的域的浏览器中读取或写入Cookie值,因此无法复制要与表单一起提交的相同值。

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

这是JavaScript方法的最大问题-JavaScript中的随机数生成器不是加密安全的。 您可以在这里尝试一种解决方案 -您的里程可能因浏览器而异。 捕获鼠标的移动听起来很有趣,但是使用这种方法时必须格外小心-您必须防止在未检测到任何形式的情况下提交任何形式,因为在实际CSRF攻击中可能就是这种情况。 如果可能的话,请避免使用安全性之类的东西,最好使事情简单化-复杂性是安全性的大敌。

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

{% extends 'base.html' %}

<script>
    window.csrf_token = "{% csrftoken %}";
</script>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM