Django 1.5.2 版本发行说明
2013 年 8 月 13 日
这是 Django 1.5.2,是 Django 1.5 的修复错误和安全发布版本。
通过用户提供的重定向 URL 减轻了可能的 XSS 攻击风险。
Django 在某些情况下(例如,django.contrib.auth.views.login()
、django.contrib.comments
和 i18n)依赖于用户输入来将用户重定向到“成功”URL。这些重定向的安全检查(即 django.utils.http.is_safe_url()
)没有检查 URL 的协议是否为 http(s)
,因此允许输入 javascript:...
类型的 URL。如果开发人员依赖于 is_safe_url()
来提供安全的重定向目标,并将这样的 URL 放入链接中,他们可能会受到 XSS 攻击的影响。当前情况下,这个错误不会影响 Django,因为我们只将这个 URL 放入 Location
响应头中,而浏览器似乎会忽略其中的 JavaScript。
django.contrib.admin 中的 XSS 漏洞
如果在 Django 1.5 中使用了 URLField,它会在管理页面的更改页面上显示字段的当前值和到目标的链接。这个小部件的显示程序存在缺陷,允许进行 XSS 攻击。
漏洞修复
- 修复了与 prefetch_related() 有关的崩溃问题 (#19607),以及一些与
prefetch_related
有关的pickle
回归问题 (#20157 和 #20257)。 - 在 Python 3 上修复了 django.contrib.gis 中 Google 地图输出的回归问题 (#20773)。
- 使
DjangoTestSuiteRunner.setup_databases
正确处理默认数据库的别名 (#19940),并防止teardown_databases
尝试拆除别名 (#20681)。 - 修复了 Python 3 上的
django.core.cache.backends.memcached.MemcachedCache
后端的get_many()
方法 (#20722)。 - 修复了 django.contrib.humanize 中的翻译语法错误。受影响的语言包括墨西哥西班牙语、蒙古语、罗马尼亚语和土耳其语 (#20695)。
- 新增对 wheel 软件包的支持( #19252 )。
- 用户登录时,CSRF 令牌现在会轮换。
- 包括 #20212 和 #20025 在内的一些 Python 3 兼容性修复。
- 修复了一些罕见情况下 get() 引发无限递归异常的问题 (#20278)。
- makemessages 不再因为
UnicodeDecodeError
而崩溃 (#20354)。 - 修复了与 SpatiaLite 的
geojson
检测问题。 - assertContains() 再次能够处理二进制内容 (#20237)。
- 修复了如果 ManyToManyField 具有 Unicode
name
参数时的问题 (#20207)。 - 确保 WSGI 请求的路径根据
SCRIPT_NAME
环境变量或 FORCE_SCRIPT_NAME 设置正确设置,无论它们是否以斜杠结尾 (#20169)。 - 修复了 override_settings() 装饰器的一个晦涩 Bug。如果你遇到了
AttributeError: 'Settings' object has no attribute '_original_allowed_hosts'
异常,那么这个问题可能已经修复了(#20636)。