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
在将会话数据存储到后台之前对其进行序列化。如果您使用的是 signed cookie session backend 和 SECRET_KEY
攻击者已知(Django中不存在导致其泄露的固有漏洞),攻击者可以将字符串插入到他们的会话中,当该会话被取消pickle时,会在服务器上执行任意代码。这样做的技术简单且易于在互联网上获取。尽管cookie会话存储会签名cookie存储的数据以防止篡改,但 SECRET_KEY
泄漏会立即升级为远程代码执行漏洞。
这种攻击可以通过使用JSON序列化会话数据而不是 pickle
. 为了方便起见,Django 1.5.3引入了一个新的设置, SESSION_SERIALIZER
,自定义会话序列化格式。为了向后兼容,此设置默认为使用 pickle
. 虽然JSON序列化不支持所有的python对象,例如 pickle
是的,我们强烈建议切换到JSON序列化值。此外,由于JSON需要字符串键,如果在 request.session
. 见 会话序列化 有关详细信息的文档。
7月 22, 2024