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 中使用非字符串键,可能会遇到问题。有关更多详细信息,请参阅 会话序列化 文档。

Back to Top