Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在子域上为Django应用程序提供服务时,CSRF令牌失败_Django - Fatal编程技术网

尝试在子域上为Django应用程序提供服务时,CSRF令牌失败

尝试在子域上为Django应用程序提供服务时,CSRF令牌失败,django,Django,我分别在这些域上成功配置了两个Django应用程序: 它们都可以很好地处理GET请求,但是第一个(主域)可以处理POST请求,而第二个(子域)不能。我可以验证我是否正确地包含了{%csrf\u token%},因为我甚至无法登录到管理面板。(管理面板可访问,但不可登录。) 它们都可以公开访问,第二个Django应用程序的调试正在进行中,如果您愿意,您可以测试自己 澄清一下,当我在主域上但在另一个端口上提供第二个服务时,它的工作原理与预期一样。来自: 此外,对于HTTPS请求,严格的refer

我分别在这些域上成功配置了两个Django应用程序:

它们都可以很好地处理GET请求,但是第一个(主域)可以处理POST请求,而第二个(子域)不能。我可以验证我是否正确地包含了
{%csrf\u token%}
,因为我甚至无法登录到管理面板。(管理面板可访问,但不可登录。)

它们都可以公开访问,第二个Django应用程序的调试正在进行中,如果您愿意,您可以测试自己

澄清一下,当我在主域上但在另一个端口上提供第二个服务时,它的工作原理与预期一样。

来自:

此外,对于HTTPS请求,严格的referer检查由 CSRFVIEW中间件。这意味着即使子域可以设置或 修改域上的Cookie,它不能强制用户发布到您的 应用程序,因为该请求不会来自您自己的确切域

这也解决了一个中间人攻击,这是可能的 HTTPS在使用会话独立机密时,由于以下事实 HTTP集Cookie头(不幸地)甚至被客户端接受 当他们在HTTPS下与网站交谈时。(参考检查不可用。) 已完成HTTP请求,因为存在Referer标头 在HTTP下不够可靠。)

如果设置了CSRF\u COOKIE\u域设置,则会比较referer 反对它。此设置支持子域。例如 CSRF_COOKIE_DOMAIN='.example.com'将允许来自的POST请求 www.example.com和api.example.com。如果未设置该设置,则 referer必须与HTTP主机头匹配

将接受的引用扩展到当前主机或cookie之外 域可以通过CSRF_TRUSTED_Originates设置完成


最后两段是重要的部分。您需要设置
CSRF\u COOKIE\u DOMAIN='.omerselcuk.engineer'
或set.

谢谢您的回答。我已经做了这些,比如
CSRF\u TRUSTED\u ORIGINS=[“visions.omerselcuk.engineer”]
CSRF\u COOKIE\u DOMAIN=“visions.omerselcuk.engineer”
。我做错了什么?嗯,我开始怀疑了,把它们改成了
.omerselcuk.engineer
,它就像一个符咒。但是,我不明白为什么会这样。你能指导我吗?如果你不是在处理子域,而是在处理任何域呢?e、 g.你的应用程序位于
myapp.com
,但也有
domain.com
example.org
client12345.net
。你如何让CSRF在这些领域工作?你不能让CSRF在任何领域工作,因为这违背了它的目的。如果它是一个有限的列表,您可以将它们添加到如上所述的可信来源。