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_authenticated
和User.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)。