---
title: "Django 1.8.16 版本发行说明"
version: 6.0
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/6.0/releases/1.8.16/
canonical: https://djangodocs.dev/zh-hans/6.0/releases/1.8.16/
---
# Django 1.8.16 版本发行说明

*2016 年 11 月 1 日*

Django 1.8.16 修复了 1.8.15 版本中的两个安全问题。

## 在 Oracle 上运行测试时创建了带有硬编码密码的用户

在使用 Oracle 数据库运行测试时，Django 会创建一个临时数据库用户。在旧版本中，如果在数据库设置的 `TEST` 字典中没有手动指定密码，那么会使用硬编码的密码。这可能允许具有对数据库服务器的网络访问权限的攻击者连接到数据库。

通常情况下，在测试套件完成后会删除此用户，但如果使用 `manage.py test --keepdb` 选项，或者用户有一个活动会话（例如攻击者的连接），则不会删除此用户。

现在每次测试运行都使用随机生成的密码。

## 当 `DEBUG=True` 时，存在 DNS 重新绑定漏洞

在旧版本的 Django 中，当 `settings.DEBUG=True` 时，不会验证 `Host` 标头与 `settings.ALLOWED_HOSTS` 是否匹配。这使得它们容易受到 [DNS 重新绑定攻击](https://benmmurphy.github.io/blog/2016/07/11/rails-webconsole-dns-rebinding/) 的威胁。

虽然 Django 没有提供远程代码执行的模块，但这至少是一个跨站点脚本（XSS）的漏洞，如果开发人员在开发环境中加载了生产数据库的副本或连接到一些没有开发实例的生产服务，这可能会非常严重。如果项目使用类似 `django-debug-toolbar` 这样的包，攻击者可以执行任意的 SQL 查询，如果开发人员使用超级用户账户连接到数据库，那么情况可能会特别糟糕。

现在无论 `DEBUG` 的值如何，都会验证 `settings.ALLOWED_HOSTS`。为了方便起见，如果 `ALLOWED_HOSTS` 为空且 `DEBUG=True`，则允许以下本地主机的变化 `['localhost', '127.0.0.1', '::1']`。如果您的本地设置文件中包含生产环境的 `ALLOWED_HOSTS` 值，现在必须将其省略以获得这些备用值。
