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

*2014 年 8 月 20 日*

Django 1.4.14 修复了 1.4.13 中的多个安全问题。

## `reverse()` 可能生成指向其他主机的 URL

在某些情况下，URL 反转可能生成方案相对的 URL（以两个斜杠开头的 URL），这可能会使用户意外地被重定向到另一个主机。攻击者可以利用这一点，例如，通过将用户重定向到一个专门设计用来索取用户密码的钓鱼网站。

为了解决这个问题，URL 反查现在确保没有 URL 以两个斜杠（//）开头，用其 URL 编码的对应项（ %2F ）替换第二个斜杠。这种方法确保语义保持不变，同时使 URL 相对于域而不是协议。

## 文件上传拒绝服务攻击

在此版本之前，在其默认配置下，Django 的文件上传处理在上传重复文件名时可能会退化为产生大量的 `os.stat()` 系统调用。由于 `stat()` 可能会引发 IO 操作，这可能会导致数据相关的巨大性能下降，随着时间的推移逐渐恶化。最终结果是，给定足够的时间，具有上传文件权限的用户可以通过上传 0 字节文件来导致上传处理程序性能下降，最终导致它变得非常慢。在这一点上，即使是较慢的网络连接和少量的 HTTP 请求也足以使站点不可用。

我们通过更改生成文件名的算法来解决了这个问题，如果已经存在具有上传名称的文件，那么 [`Storage.get_available_name()`](/zh-hans/5.2/ref/files/storage/#django.core.files.storage.Storage.get_available_name) 现在会附加一个下划线和一个随机的 7 位字母数字字符串（例如 `"_x3a1gho"`），而不是通过迭代下划线后面跟着一个数字（例如 `"_1"`，`"_2"` 等）。

## `RemoteUserMiddleware` 会话劫持

在使用 [`RemoteUserMiddleware`](/zh-hans/5.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware) 和 `RemoteUserBackend` 时，在没有中断注销的情况下，在请求之间更改 `REMOTE_USER` 标头可能会导致后续用户接管之前用户的会话。现在，在登录尝试失败时，中间件会注销用户。

## 通过查询字符串操纵在 `contrib.admin` 中的数据泄露

在旧版本的 Django 中，通过修改查询字符串上的 "popup" 和 "to\_field" 参数，可以揭示任何字段的数据。例如，请求像 `/admin/auth/user/?pop=1&t=password` 这样的 URL 并查看页面的 HTML 允许查看每个用户的密码哈希。尽管管理员要求用户首先具有查看更改表单页面的权限，但如果你依赖于用户只能访问模型上的特定字段，这可能会泄漏数据。

为了解决这个问题，现在如果指定了一个不是与已在管理员中注册的模型相关的字段的 `to_field` 值，将引发异常。
