4

我有一个 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 服务器。它在文本浏览器上运行良好...]

[ 编辑:鉴于服务器抛出的消息,为什么没有给出引荐标头?]

4

2 回答 2

1

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

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

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

于 2015-03-31T19:03:14.380 回答
0

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

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

于 2015-03-30T21:34:30.457 回答