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