Django的安全策略

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

报告安全问题

Short version: please report security issues by emailing security@djangoproject.com.

Most normal bugs in Django are reported to our public Trac instance, but due to the sensitive nature of security issues, we ask that they not be publicly reported in this fashion.

相反,如果您认为您在Django中发现了某些具有安全隐患的内容,请通过电子邮件将相关问题的描述发送至security@djangoproject.com 发送到该地址的邮件到达安全团队

一旦您通过电子邮件提交问题,您应在48小时内收到安全团队成员的确认,根据要采取的措施,您可能会收到更多后续电子邮件。

发送加密的报告

如果你想发送一个加密邮件(optional),security@djangoproject.com的公钥ID是0xfcb84b8d1d17f80b,这个公钥可从大多数常用的密钥服务器获得。

支持的版本

在任何时候,Django团队都为几个Django版本提供了官方的安全支持:

  • The master development branch, hosted on GitHub, which will become the next major release of Django, receives security support. Security issues that only affect the master development branch and not any stable released versions are fixed in public without going through the disclosure process.
  • 最新的两个Django发行版系列获得安全支持。 例如,在导致Django 1.5发布的开发周期中,将为Django 1.4和Django 1.3提供支持。 在Django 1.5发布之后,Django 1.3的安全支持将会结束。
  • Long-term support release将在指定的时期内收到安全更新。

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

Django如何公开安全问题

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

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

First, we notify django-announce of the date and approximate time of the upcoming security release, as well as the severity of the issues. 这是为了帮助那些需要确保他们有工作人员的组织来处理我们的声明,并根据需要升级Django。 严重性级别是:

高 T0>:

  • 远程代码执行
  • SQL注入

中等 T0>:

  • 跨站点脚本(XSS)
  • 跨站请求伪造(CSRF)
  • 破坏的身份验证

低 T0>:

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

其次,我们通知一个people and organizations,主要由操作系统供应商和Django的其他分销商组成。 这封电子邮件是由来自Django的发行团队的人员的PGP密钥签署的,其中包括:

  • 这个问题的完整描述以及Django的受影响版本。
  • 我们将采取的步骤来解决这个问题。
  • 这个补丁(如果有的话)将被应用于Django。
  • Django团队将应用这些补丁的日期,发布新版本并公开披露该问题。

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

  1. 将相关的补丁应用于Django的代码库。
  2. Issue the relevant release(s), by placing new packages on the Python Package Index and on the Django website, and tagging the new release(s) in Django’s git repository.
  3. Post a public entry on the official Django development blog, describing the issue and its resolution in detail, pointing to the relevant patches and new releases, and crediting the reporter of the issue (if the reporter wishes to be publicly identified).
  4. 发布通知到django-announce OSS-安全 @ T0>列表.OpenWall的.COM 邮件列表链接到博客文章。

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

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

Django团队还维护Django中披露的archive of security issues disclosed in Django

谁收到预先通知

事先收到安全通知的人员和组织的名单不会,也不会公布。

我们也希望尽可能保持这份清单尽可能小,以便在披露之前更好地管理机密信息的流动。 因此,我们的通知列表是不是,只是Django的用户列表,只是作为Django的用户是不足以放置在通知列表中的理由。

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

  1. 操作系统厂商和Django中的其他经销商谁提供适当的泛型(即不是 T0>个人的个人电子邮件地址),联系地址与他们的Django包汇报问题,或一般的安全报告。 在任何情况下,这些地址都不能转发到公共邮件列表或错误跟踪器。 转发个人维护者或安全响应联系人的私人邮件的地址是可以接受的,尽管私人安全跟踪器或安全响应组是非常受欢迎的。
  2. 在个案的基础上,个人包装维护者已经表现出对这些通知的回应和负责任的行动。
  3. 在个案的基础上,根据Django开发团队的判断,其他实体需要了解未决的安全问题。 通常情况下,该组中的成员将由Django的一些最大和/或最有可能受到严重影响的已知用户或分发者组成,并且需要具有能够负责任地接收,保密并根据这些通知采取行动的能力。

请求通知

如果您认为您或您授权代表的组织属于上面列出的其中一个组织,则可以通过发送电子邮件至security@djangoproject.com来要求将其添加到Django的通知列表中。 请使用主题行“安全通知请求”。

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

  • 您的全名,真实姓名以及您所代表的组织的名称(如果适用)以及您在该组织中的角色。
  • 有关您或您的组织至少符合上述一组标准的详细说明。
  • 您为什么要求安全通知的详细说明。 Again, please keep in mind that this is not simply a list for users of Django, and the overwhelming majority of users should subscribe to django-announce to receive advanced notice of when a security release will happen, without the details of the issues, rather than request detailed notifications.
  • 您希望添加到我们的通知列表中的电子邮件地址。
  • 解释谁将接收/审阅发送到该地址的邮件,以及有关将要采取的自动操作(即,在错误跟踪器中提交机密问题)的信息。
  • 对于个人而言,与您的地址相关联的公钥的ID可用于验证您收到的电子邮件,并根据需要加密发送给您的电子邮件。

提交之后,Django开发小组将考虑您的请求;您将在30天内收到回复,通知您您的请求的结果。

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