【问题标题】:Django: DisallowedHost in the new version of DjangoDjango:新版Django中的DisallowedHost
【发布时间】:2016-12-19 18:29:06
【问题描述】:

到目前为止,我在虚拟环境中的 Vagrant 机器中使用 Django==1.9.6。但是我创建了一个新的虚拟环境来测试新的 Django 并安装了最新版本的 Django(版本 1.10.4)。而我什么也没做,只是跑了服务器

sudo python manage.py runserver 0.0.0.0:80

当我尝试打开 url 而不是 Welcome to Django 时,出现错误:

DisallowedHost 在 /

HTTP_HOST 标头无效:55.55.55.5

不过,我已通过将我的 vagrant 机器 (55.55.55.5) 的 IP 设置到 ALLOWED_HOST 列表中来纠正此问题。

这是在较新版本的 Django 中实现的,还是在以前版本的 Django 中已经实现了此功能,但由于我的设置中的一些错误配置而发生错误?

【问题讨论】:

    标签: python django


    【解决方案1】:

    根据(优秀)docs

    在 Django 1.10.3 中更改:

    在旧版本中,如果 DEBUG=True,则不会检查 ALLOWED_HOSTS。这在 Django 1.9.111.8.16 中也进行了更改,以防止 DNS 重新绑定攻击。

    (强调我的)

    另请参阅 1.9.11 的发行说明(如 @Sayse 所述)以了解此更改的基本原理:

    虽然 Django 没有提供允许远程代码执行的模块,但这至少是一个跨站点脚本向量,如果开发人员在开发中加载生产数据库的副本或连接到某些生产服务,这可能会非常严重例如,没有开发实例。

    【讨论】:

      【解决方案2】:

      在以前的版本中,如果 DEBUG 设置为 True,Django 允许所有主机(请参阅 https://docs.djangoproject.com/en/1.10/ref/settings/#allowed-hosts )。我现在这样做:

      if DEBUG is True:
          ALLOWED_HOSTS = ['127.0.0.1']
      else:
          ALLOWED_HOSTS = ['domain.tld', 'www.domain.tld']
      

      【讨论】:

        猜你喜欢
        • 2017-03-26
        • 1970-01-01
        • 2020-05-07
        • 1970-01-01
        • 2017-04-01
        • 1970-01-01
        • 2017-05-26
        • 2016-08-10
        • 1970-01-01
        相关资源
        最近更新 更多