在文本浏览器中使用Django的https站点抛出CSRF验证失败

时间:2015-03-27 16:50:37

标签: python django emacs https lynx

我有一个Django网站在使用HTTPS协议的服务器上运行良好,我可以使用它,所有类型的浏览器都没有问题。

问题在于,每当我尝试使用文本浏览器时,我都会得到一个

禁止(403)

CSRF verification failed. Request aborted.

You are seeing this message because this HTTPS site requires a 'Referer header' to be sent by your Web browser, but none was sent.
This header 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 'Referer' headers, please re-enable them, at least for this site, or for HTTPS
connections, or for 'same-origin' requests.

Help

Reason given for failure:

    Referer checking failed - no Referer.

我在emacs上尝试过链接,lynx,甚至w3m和eww都无济于事。

当我使用HTTP站点时(比如当我使用manage.py runserver时)我可以在文本浏览器上使用该站点没有问题,但我的生产服务器需要一个HTTPS协议,当我收到此错误时。

[编辑:仅出于测试目的,我在生产服务器上为我的django站点部署了一个HTTP服务器。它适用于文本浏览器...]

[编辑:给定服务器抛出的消息,为什么没有给出Referer头文件? ]

2 个答案:

答案 0 :(得分:1)

Lynx可能配置为不发送Referer标头。检查/etc/lynx.cfg中的“REFERER”。

NO_REFERER_HEADER之类的条目。确保将其设置为false。如果不是这样,请在该配置中查看任何其他已禁用的referer标头。

同样相关的是,CSRF和Referer标题辩论:https://code.djangoproject.com/ticket/16870

答案 1 :(得分:0)

您是否在设置中设置了SECURE_PROXY_SSL_HEADER,SESSION_COOKIE_SECURE和CSRF_COOKIE_SECURE?

https://docs.djangoproject.com/en/1.7/topics/security/#ssl-https