发布安全更新

作者:James Bennett 发布于 2010年9月8日

今天,Django 团队发布了一个新的版本——Django 1.2.2——来修复我们收到的一个安全问题。这个问题由两个不同的个人独立披露,我们强烈建议所有 Django 1.2 用户立即升级。

问题描述

从 1.2 版本开始,Django 核心框架包含了一个默认启用的系统,用于检测和防止针对 Django 驱动的应用程序的跨站请求伪造 (CSRF) 攻击。之前的 Django 版本提供了另一个可选启用的系统来实现相同目的。

Django 1.2 的 CSRF 保护系统涉及生成一个随机令牌,并将其作为隐藏字段插入到发出的表单中。相同的值也会设置在 Cookie 中,并且在提交时会比较 Cookie 值和表单值。

用于将 CSRF 令牌插入表单的提供的模板标签——{% csrf_token %}——明确地信任 Cookie 值,并按原样显示它。因此,能够篡改 CSRF Cookie 值的攻击者可以导致任意内容被插入到表单的发出 HTML 中,且未进行转义,从而启用跨站脚本 (XSS) 攻击。

此问题首先通过 Django Trac 实例中的公开工单报告;在进行分类时,Mozilla 的 Jeff Balogh 独立报告了此问题,并提供了更广泛的描述。

受影响的版本

由于当前的 CSRF 保护系统是 Django 1.2 中的新功能,因此较旧的版本不受影响。

解决方案

已将补丁应用于 Django 主干和 1.2 发布分支,以确保 Cookie 值永远不会被信任,并且始终会被转义。未来的 Django 版本可能会迁移到不使用专用 Cookie,以避免此类问题的可能性。

补丁可以直接从相应的变更集中获取

已发布以下版本

关于安全的一般说明

与往常一样,我们要求通过私人电子邮件发送至 security@djangoproject.com 报告潜在的安全问题,而不是通过 Django 的 Trac 实例或 django-developers 列表。

由于此问题的时效性,我们没有遵循预先通知 Django 分发者的正常流程;通知分发者的邮件是在发布此版本之前发送的。如果您是或代表 Django 的第三方分发者,并且没有收到来自 Django 发布经理的通知电子邮件,请与 james@b-list.org 联系。

返回顶部