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

*2013 年 9 月 10 日*

这是 Django 1.5.3，是 Django 1.5 系列的第三个发布版本。它解决了一个安全问题，并包含一个可选择的功能，以增强 [`django.contrib.sessions`](/zh-hans/6.1/topics/http/sessions/#module-django.contrib.sessions) 的安全性。

## `ssi` 模板标签中的目录遍历漏洞

在以前的 Django 版本中，可以通过指定以允许的根目录之一开头的相对路径来绕过 `ssi` 模板标签用于安全性的 `ALLOWED_INCLUDE_ROOTS` 设置。例如，如果 `ALLOWED_INCLUDE_ROOTS = ("/var/www",)`，那么以下情况是可能的：

```html+django
{% ssi "/var/www/../../etc/passwd" %}
```

实际上，这并不是一个非常常见的问题，因为它需要模板作者将 `ssi` 文件放入用户可控制的变量中，但从原理上讲是可能的。

## 应对 [`django.contrib.sessions`](/zh-hans/6.1/topics/http/sessions/#module-django.contrib.sessions) 中的远程代码执行漏洞。

[`django.contrib.sessions`](/zh-hans/6.1/topics/http/sessions/#module-django.contrib.sessions) 目前在将会话数据存储到后端之前使用 [`pickle`](https://docs.python.org/3/library/pickle.html#module-pickle) 进行序列化。如果您使用的是 [签名的 Cookie 会话后端](/zh-hans/6.1/topics/http/sessions/#cookie-session-backend) 并且 [`SECRET_KEY`](/zh-hans/6.1/ref/settings/#std-setting-SECRET_KEY) 被攻击者知晓（Django 本身没有固有的漏洞导致泄漏），攻击者可以在他们的会话中插入一个字符串，当反序列化时，在服务器上执行任意代码。执行此操作的技术简单且易于在互联网上找到。虽然 Cookie 会话存储会对存储在 Cookie 中的数据进行签名以防止篡改，但一旦 [`SECRET_KEY`](/zh-hans/6.1/ref/settings/#std-setting-SECRET_KEY) 泄漏，立即升级为远程代码执行漏洞。

可以通过使用 JSON 而不是 [`pickle`](https://docs.python.org/3/library/pickle.html#module-pickle) 对会话数据进行序列化来缓解此攻击。为了方便这一点，Django 1.5.3 引入了一个新的设置 [`SESSION_SERIALIZER`](/zh-hans/6.1/ref/settings/#std-setting-SESSION_SERIALIZER)，用于自定义会话序列化格式。为了向后兼容，默认情况下这个设置使用 [`pickle`](https://docs.python.org/3/library/pickle.html#module-pickle)。虽然 JSON 序列化不像 [`pickle`](https://docs.python.org/3/library/pickle.html#module-pickle) 那样支持所有的 Python 对象，但我们强烈建议切换到 JSON 序列化的值。此外，由于 JSON 要求使用字符串键，如果在 `request.session` 中使用非字符串键，可能会遇到问题。有关更多详细信息，请参阅 [会话序列化](/zh-hans/6.1/topics/http/sessions/#session-serialization) 文档。
