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 重新绑定漏洞¶
Older versions of Django don't validate the Host header against
settings.ALLOWED_HOSTS when settings.DEBUG=True. This makes them
vulnerable to a DNS rebinding attack.
虽然 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)。