Django:新版Django中的DisallowedHost

时间:2016-12-19 18:29:07

标签: python django

到目前为止,我在我的Vagrant机器中使用Django == 1.9.6在virtualenv中。但是我创建了一个新的虚拟环境来测试新的Django并安装了最新版本的Django(版本1.10.4)。我没有做任何事情,只是运行服务器

sudo python manage.py runserver 0.0.0.0:80

当我尝试打开网址而不是Welcome to Django时,我收到了错误消息:

  

/ /

中的DisallowedHost      

HTTP_HOST标头无效:55.55.55.5

我已经通过将我的流浪汉机器的IP(55.55.55.5)设置为ALLOWED_HOST列表来纠正此问题。

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

2 个答案:

答案 0 :(得分:3)

根据(优秀)docs

  

在Django中更改 1.10.3

     

在旧版本中,如果DEBUG = True,则不检查ALLOWED_HOSTS。这也在Django 1.9.11 1.8.16 中发生了变化,以防止DNS重新绑定攻击。

(强调我的)

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

  

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

答案 1 :(得分: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']