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