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