首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSRF验证失败- Referer不安全,而主机安全

CSRF验证失败- Referer不安全,而主机安全
EN

Stack Overflow用户
提问于 2016-01-08 01:11:38
回答 2查看 6.7K关注 0票数 9

我将Django从1.8升级到1.9。之后,在Django管理员登录后,我在本地主机上收到以下错误:

Referer checking failed - Referer is insecure while host is secure

在生产环境中,一切运行正常。下面是我的settings.py文件的一个片段:

代码语言:javascript
复制
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
EN

回答 2

Stack Overflow用户

发布于 2016-01-08 03:20:38

您的settings.py文件中的这些行在生产环境中没有问题,因为您使用的是附加到您的域的SSL证书。但是,在本地,您可能正在使用http://localhost:8000或类似的东西。如果你尝试通过https://localhost:{{YOUR_PORT_NUMBER}}连接,你很可能会得到像ERR_SSL_PROTOCOL_ERROR这样的错误。

这个问题在django/django/middleware/csrf.py的第167-168行。当您在生产环境中使用https时,request.is_secure()返回True...which要求HTTP_REFERER也为真,否则将得到您引用的错误。

一种解决方案是adjust your settings.py file depending on whether you're in your local or production environment。这样,您就可以将这三行代码添加到一个settings_production.py文件中,该文件导入本地主机和生产服务器通用的其他设置。您的本地主机将使用不包括这些行的一组不同的设置。

票数 5
EN

Stack Overflow用户

发布于 2019-08-01 17:40:12

当我从ssl设置切换到无ssl时,我遇到了这个错误,并且忘记在nginx配置中删除上游配置中的最后一行:

代码语言:javascript
复制
  location / {
    proxy_pass http://127.0.0.1:8085;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host; #:8080;
    #proxy_set_header X-FORWARDED-PROTO https;

  }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34661199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档