2013年9月10日
这是Django 1.5.3,Django 1.5系列的第三个版本。它解决一个安全问题,并且还包含一个选择加入功能,以增强django.contrib.sessions的安全性。
在以前的Django版本中,通过指定以允许的根为起点的相对路径,可以绕过用于ssi模板标记的安全性的ALLOWED_INCLUDE_ROOTS设置。例如,如果ALLOWED_INCLUDE_ROOTS = (“/ var / www”,)
{% ssi "/var/www/../../etc/passwd" %}
在实践中,这不是一个很常见的问题,因为它需要模板作者将ssi文件放在用户控制的变量中,但原则上是可能的。
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序列化不支持像pickle这样的所有Python对象,但我们强烈建议切换到JSON序列化值。此外,由于JSON需要字符串键,如果您在request.session中使用非字符串键,您很可能会遇到问题。有关详细信息,请参阅Session serialization文档。
2015年5月13日