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

*2015 年 3 月 18 日*

Django 1.7.7 修复了 1.7.6 版本中的一些错误和安全问题。

## `strip_tags()` 存在拒绝服务的可能性

去年 [`strip_tags()`](/zh-hans/5.0/ref/utils/#django.utils.html.strip_tags) 被更改为迭代工作。问题在于它处理的输入大小可能在每次迭代中增加，这导致了 `strip_tags()` 中的无限循环。这个问题只影响那些没有收到 [HTMLParser 中的 bug 修复](https://bugs.python.org/issue?@action=redirect&bpo=20288) 的 Python 版本，具体来说是 Python \< 2.7.7 和 3.3.5。一些操作系统供应商也已经将修复 Python bug 的补丁合并到了早期版本的软件包中。

为了解决这个问题，如果 `strip_tags()` 检测到正在处理的字符串长度增加，它将返回原始输入。请记住，关于 `strip_tags()` 的结果是否安全的 HTML 没有提供任何保证。因此，在标记 `strip_tags()` 调用的结果为安全 HTML 之前，绝对不要忘记首先进行转义，例如使用 [`escape()`](/zh-hans/5.0/ref/utils/#django.utils.html.escape)。

## 通过用户提供的重定向 URL 减轻了可能的 XSS 攻击风险。

Django 在某些情况下依赖于用户输入（例如 `django.contrib.auth.views.login()` 和 [i18n](/zh-hans/5.0/topics/i18n/)）来将用户重定向到“成功”URL。这些重定向的安全性检查（即 `django.utils.http.is_safe_url()`）接受具有前导控制字符的 URL，因此将像 `\x08javascript:...` 这样的 URL 视为安全。目前这个问题不会影响 Django，因为我们只将这个 URL 放入 `Location` 响应头中，而浏览器似乎会忽略那里的 JavaScript。经过我们测试的浏览器还会将以控制字符前缀的 URL，如 `%08//example.com`，视为相对路径，因此重定向到不安全的目标也不是一个问题。

然而，如果开发人员依赖于 `is_safe_url()` 来提供安全的重定向目标，并将这样的 URL 放入链接中，他们可能会受到 XSS 攻击的影响，因为一些浏览器，如 Google Chrome，会忽略在锚点的 `href` 中 URL 开头的控制字符。

## 漏洞修复

- 修复了在迁移中重命名类的问题，其中重命名子类会导致引用超类的对象记录错误状态（[#24354](https://code.djangoproject.com/ticket/24354)）。
- 在合并迁移冲突时，在干运行模式下停止写入迁移文件。当使用 `makemigrations --merge` 并指定 `verbosity=3` 时，迁移文件将写入到 `stdout` （[#24427](https://code.djangoproject.com/ticket/24427)）。
