Django 1.10.3 版本发行说明

2016 年 11 月 1 日

Django 1.10.3 修复了 1.10.2 中的两个安全问题和几个漏洞。

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

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

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

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

DEBUG=True 时,存在 DNS 重新绑定漏洞

在旧版本的 Django 中,当 settings.DEBUG=True 时,不会验证 Host 标头与 settings.ALLOWED_HOSTS 是否匹配。这使得它们容易受到 DNS 重新绑定攻击 的威胁。

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

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

漏洞修复

  • 允许对 User.is_authenticatedUser.is_anonymous 属性进行 set 成员测试 (#27309)。
  • 修复了在具有 RenameModel 操作的项目中运行 migrate 时的性能回归问题 (#27279)。
  • makemigrations 中的 allow_migrate() 调用中添加了 model_name 参数 (#27200)。
  • 使 JavaScriptCatalog 视图尊重 packages 参数;之前它会被忽略 (#27374)。
  • 修复了在 PostgreSQL 上使用 QuerySet.bulk_create() 时,对象数量是 batch_size 的倍数加一时的问题 (#27385)。
  • 防止 i18n_patterns() 使用太多 URL 作为语言,以修复 prefix_default_language=False 的用例 (#27063)。
  • 在并发请求中,将 SessionMiddleware 中可能不正确的重定向替换为 SuspiciousOperation,以指示请求无法完成 (#27363)。