我在Apache上有一个带mod_wsgi的Django站点。首先,管理页面将返回500错误,它在重新启动Apache等之后开始工作。但是现在当我登录时,我收到了403消息:
CSRF verification failed. Request aborted.
You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.
If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for 'same-origin' requests.
我在设置中对CSRF的唯一选择是CSRF_COOKIE_DOMAIN =" 127.0.0.1"
CSSRF_SECURE_DOMAIN未设置,因此默认为False。我目前还没有使用https,因为该网站仍处于开发阶段。
但我需要能够访问管理界面。
如何修复此错误?一切都在本地开发服务器上运行良好,但一旦推到Web服务器,我遇到了这些类型的问题。
那么有没有人对如何解决我遇到的CSRF验证错误有任何建议?如果我在网站上实施SSL,有没有人知道它会如何改变?
所有请求/响应都来自同一台服务器。感谢所提供的任何帮助。
编辑:
在我的Django记录器文件输出中,我得到这一行:
[04/Nov/2015 18:13:20] WARNING [django.request:98] Forbidden (CSRF cookie not set.): /sa-admin/login/
说根本没有设置CSRF cookie。但我使用默认的contrib.admin来处理所有这些,所以我对这个问题感到困惑。管理员只添加了套装。但这真的只是一个皮肤。
答案 0 :(得分:1)
您应该从设置中删除CSRF_COOKIE_DOMAIN = "127.0.0.1"
。
Django正在为您的生产域寻找CSRF令牌cookie,但由于您的设置将应用程序设置为127.0.0.1
,因此您无法找到它。因此它返回HTTP 403并记录未设置cookie的日志。