我有点困惑。 csrf标记在django templates
中设置使用标记:
{{csrf_token}}
但是,我的应用程序是Cordova应用程序,这意味着服务器没有任何加载。 页面是从设备的内存中提取的。
在这种情况下如何获得csrf_token?
我想创建一个视图,我将用ajax调用,它只会将csrf_token字符串返回给调用者。
你是怎么做到的?这会打破csrf_token的安全吗? 也许有更好的解决方案?
如果该解决方案是正确的,请告诉您如何从请求中获取csrf令牌。
所以只是以一种不同的方式重申问题:我需要从静态页面提交表单。但是,当我这样做时,我会收到csrf错误。
如何在不收到csrf错误的情况下提交表单?
提前致谢。
答案 0 :(得分:1)
我认为sligodave正在链接到正确的文档,但不是Django中描述的确切过程,您需要执行额外的步骤或获取csrf。如果您使用ensure_csrf_token为自己创建一个可以从中获取cookie的视图,则可以使用JS来获取和解析该cookie,然后转向并在POST上使用它。由于请求在同一个域上,因此传递它不会有任何问题。我会在安全堆栈上推迟this answer来说这种做法没有天生的安全漏洞。
答案 1 :(得分:0)
我认为你想要的东西可以用一点点的javascript来实现。
https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#ajax
您从Cookie中获取csrf令牌并将其设置为响应中的标题,或者在表单上设置csrf字段。
编辑:没关系,我错过了你问题的“静态”部分。它永远不会通过django所以没有csrf cookie。我会得到我的外套!