Django 1.5.3 发行说明 — Django 文档

来自菜鸟教程
Django/docs/3.2.x/releases/1.5.3
跳转至:导航、​搜索

Django 1.5.3 发行说明

2013 年 9 月 10 日

这是 Django 1.5.3,Django 1.5 系列的第三个版本。 它解决了一个安全问题,还包含一个选择加入功能,以增强 django.contrib.sessions 的安全性。

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

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

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

在实践中,这不是一个很常见的问题,因为它需要模板作者将 ssi 文件放在用户控制的变量中,但原则上是可能的。


缓解 django.contrib.sessions 中的远程代码执行漏洞

django.contrib.sessions 当前使用 pickle 序列化会话数据,然后将其存储在后端。 如果您使用 签名的 cookie 会话后端:setting:`SECRET_KEY` 被攻击者知道(Django 中不存在导致其泄漏的固有漏洞) ),攻击者可以在他们的会话中插入一个字符串,当它解压时,在服务器上执行任意代码。 这样做的技术很简单,而且很容易在互联网上找到。 尽管 cookie 会话存储对 cookie 存储的数据进行签名以防止篡改,但 :setting:`SECRET_KEY` 泄漏立即升级为远程代码执行漏洞。

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