首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Django生成Javascript中的CSRF令牌

用Django生成Javascript中的CSRF令牌
EN

Stack Overflow用户
提问于 2014-07-11 21:56:57
回答 2查看 1.8K关注 0票数 2

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

从我到目前为止所做的研究来看,它看起来像是在CSRF_COOKIE中设置了csrfmiddlewaretoken表单字段中提交的值。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-12 11:30:58

从本质上讲,你所建议的是对双提交饼干 CSRF预防方法的一种改变。这是因为攻击者无法在浏览器中读取或写入域的cookie值,因此无法复制要与表单一起提交的相同值。

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

这是JavaScript方法的最大问题-- JavaScript中的随机数生成器不是密码安全的。您可以尝试这里的一个解决方案 -您的里程可能不同的浏览器。捕捉鼠标移动听起来很有趣,但必须注意这种方法--如果没有检测到任何表单,就需要防止提交,因为在真正的CSRF攻击中可能是这样。如果可能的话,试着避免任何花哨的事情,比如安全性,最好保持简单--复杂性是安全的敌人。

票数 2
EN

Stack Overflow用户

发布于 2014-07-12 13:19:57

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

代码语言:javascript
复制
{% extends 'base.html' %}

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24707214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档