Django的安全策略

Django的开发团队致力于负责任地报告和披露与安全相关的问题。 因此,我们采用并遵循一系列符合这一理想的政策,旨在使我们能够及时为Django的官方发行版以及第三方发行版提供安全更新。

报告安全问题

短期版本:请通过电子邮件发送security@djangoproject.com报告安全问题。

Django中的大多数正常错误都报告给我们的公共Trac实例,但由于安全问题的敏感性,我们要求他们以这种方式公开报告。

相反,如果您认为您在Django中发现了具有安全隐患的内容,请通过电子邮件将此问题的说明发送到security@djangoproject.com 发送到该地址的邮件到达安全小组

通过电子邮件提交问题后,您应在48小时内收到安全小组成员的确认,并且根据要采取的操作,您可能会收到进一步的后续电子邮件。

发送加密报告

如果您要发送加密电子邮件(可选),则security@djangoproject.com的公钥ID为0xfcb84b8d1d17f80b,并且此公钥可从最常用的密钥服务器。

支持的版本

在任何给定的时间,Django团队为Django的多个版本提供官方安全支持:

  • 主持在GitHub上的主开发部门将成为Django的下一个主要版本,可以获得安全支持。 仅影响主开发分支而不是任何稳定发布版本的安全问题在公开情况下是固定的,而不经过disclosure process
  • 两个最新的Django发行版系列接受安全支持。 例如,在开发周期导致Django 1.5的发布,将支持Django 1.4和Django 1.3。 发布Django 1.5后,Django 1.3的安全支持将结束。
  • Long-term support release将在指定的时间段内收到安全更新。

当出于安全原因发布新版本时,随附的通知将包括受影响版本的列表。 此列表仅由支持的版本的Django组成:旧版本也可能受到影响,但我们不进行调查确定,并且不会为这些版本发布补丁或新版本。

Django如何披露安全问题

我们从私人讨论到公开披露的安全问题的过程涉及多个步骤。

在公开披露约一周之前,我们发送两个通知:

首先,我们通知django-announce即将发布的安全版本的日期和大概时间以及问题的严重性。 这是为了帮助需要确保他们有能力处理我们的公告和根据需要升级Django的员工的组织。 严重程度为:

  • 远程执行代码
  • SQL注入

中等

  • 跨站脚本(XSS)
  • 跨站点请求伪造(CSRF)
  • 认证失败

  • 敏感数据曝光
  • 会话管理破裂
  • 未经验证的重定向/转发
  • 需要不寻常配置选项的问题

Second, we notify a list of people and organizations, primarily composed of operating-system vendors and other distributors of Django. 该电子邮件是使用来自Django发行团队的某人的PGP密钥进行签名的,包括:

  • 问题的完整描述和受影响的Django版本。
  • 我们将采取的措施来纠正这个问题。
  • 将应用于Django的修补程序(如果有)。
  • Django团队将应用这些补丁的日期,发布新版本并公开披露该问题。

在披露当天,我们将采取以下步骤:

  1. 将相关补丁应用于Django的代码库。
  2. 通过将新软件包放在Python包索引和Django网站上,并在Django的git存储库中标记新版本,发布相关版本。
  3. 官方Django开发博客上发布公开条目,详细描述问题及其解决方案,指向相关补丁和新版本,并将问题归功于记者(如果记者希望公开鉴定)。
  4. django-announce发布通知 OSS-安全 @ T0>列表.OpenWall的.COM 链接到博文的邮件列表。

如果报告的问题被认为是特别时间敏感的 - 例如,由于野生动物已知的利用,预先通知和公开披露之间的时间可能会大大缩短。

此外,如果我们有理由相信报告给我们的问题会影响Python / Web生态系统中的其他框架或工具,我们可能会私下与相应的维护者联系并讨论这些问题,并协调我们自己的披露和解决方案。

Django团队还维护Django中公开的archive of security issues disclosed in Django

Who receives advance notification

事先通知安全问题的人员和组织的完整名单不会公开,也不会公开。

我们还旨在尽可能保持此列表尽可能小,以便在公开之前更好地管理机密信息的流动。 因此,我们的通知列表不是只是Django的用户列表,并且仅仅是Django的用户不足以放在通知列表上。

广义上,安全通知的接收者分为三组:

  1. Django的操作系统供应商和其他经销商提供适当通用的(即个人的个人电子邮件地址)联系地址,用于报告与其Django包有关的问题,或用于一般安全报告。 在任一情况下,这种地址不能转发到公共邮件列表或错误跟踪器。 转发到个人维护者或安全响应联系人的私人电子邮件的地址是可接受的,但是强烈优选私人安全跟踪器或安全响应组。
  2. 在个案基础上,个别包裹维护者已经表现出对这些通知做出响应并负责地采取行动的承诺。
  3. 在个案的基础上,其他实体,根据Django开发团队的判断,需要知道一个未决的安全问题。 通常,该组中的成员资格将包括一些最大的和/或最可能受到严重影响的Django的已知用户或分发者,并且将需要被证明的能力来负责地接收,保密和对这些通知采取行动。

Requesting notifications

如果您认为您或您授权代表的机构属于上述其中一个群组,您可以要求透过电子邮件security@djangoproject.com将其新增至Django的通知清单。 请使用主题行“安全通知请求”。

您的要求必须包含以下信息:

  • 您的完整,真实姓名以及您所代表的组织的名称(如果适用)以及您在该组织内的角色。
  • 有关您或您的组织如何符合上述至少一组条件的详细说明。
  • 有关请求安全通知的原因的详细说明。 再次,请记住,这是不是只是Django的用户列表,绝大多数用户应该订阅django-announce以接收高级通知安全发布会发生,没有问题的细节,而不是请求详细的通知。
  • 您要添加到我们的通知列表中的电子邮件地址。
  • 解释将收到/审阅发送到该地址的邮件的人员,以及将要执行的任何自动操作(即,在错误跟踪器中提交机密问题)的信息。
  • 对于个人,与您的地址相关联的公钥的ID,可用于验证从您收到的电子邮件,并根据需要加密发送给您的电子邮件。

一旦提交,您的请求将由Django开发团队考虑;您将收到一封回复,在30天内通知您您的请求结果。

另请注意,对于任何个人或组织,接收安全通知是由Django开发团队自行决定授予的特权,并且此权限可随时撤销,无论是否解释。