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