# Django 6.0.7 documentation

# Django 1.5.3 版本发行说明

2013 年 9 月 10 日

这是 Django 1.5.3，是 Django 1.5 系列的第三个发布版本。它解决了一个安全问题，并包含一个可选择的功能，以增强 `django.contrib.sessions` 的安全性。

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

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

    {% ssi "/var/www/../../etc/passwd" %}

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

## 应对 `django.contrib.sessions` 中的远程代码执行漏洞。

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

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