django,在静态页面中的表单上设置csrf标记

我有点困惑 . csrf标记在django模板中设置

随着标签:

{{csrf_token}}

但是,我的应用程序是Cordova应用程序,这意味着服务器没有任何加载 . 页面从设备的内存中获取 .

在这种情况下如何获得csrf_token?

我想创建一个视图,我将用ajax调用,它只是将csrf_token字符串返回给调用者 .

你是怎么做到的?这会打破csrf_token的安全吗?也许有更好的解决方案?

如果该解决方案是正确的,请告诉您如何从请求中获取csrf令牌 .

所以只是以一种不同的方式重申问题:我需要从静态页面提交表单 . 但是,当我这样做时,我会收到csrf错误 .

如何在不收到csrf错误的情况下提交表单?

提前致谢 .

回答(2)

2 years ago

我认为sligodave链接到正确的文档,但不是Django中描述的确切过程,你需要做一个额外的步骤或获取csrf . 如果您使用ensure_csrf_token为自己创建一个可以从中获取cookie的视图,您可以使用JS来获取和解析该cookie,然后转向并在POST上使用它 . 由于请求在同一个域上,因此传递它不会有任何问题 . 我会在安全堆栈上推迟说这个实践中没有天生的安全漏洞 .

2 years ago

我想你想要的东西可以用一点点javascript来实现 .

https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#ajax

您从cookie中获取csrf令牌并将其设置为响应中的 Headers ,或者在表单上设置csrf字段 .

编辑:没关系,我错过了你问题的“静态”部分 . 它永远不会通过django所以没有csrf cookie . 我会得到我的外套!