WordPress 插件开发手册

title: "管理您的插件安全性" post_status: publish comment_status: open taxonomy: category: - developer-plugins-handbook post_tag: - Plugin Security - Wordpress Org - Repos


管理您的插件安全性

WordPress 插件的代码安全性受到高度重视

[warning]如果您发现插件存在安全问题,请阅读报告插件安全问题。[/warning]

当 WordPress 安全团队确认插件存在漏洞时,他们会联系插件作者,指导其如何修复并发布安全版本。如果插件作者未及时回应或漏洞严重,该插件/主题将从公共目录中移除,某些情况下,安全团队会直接修复并更新。

修复安全问题

当收到插件存在安全问题的报告时,可能会令人恐慌。首先,不要惊慌。每个人都会犯错。最重要的是安全且及时地修复它。

  1. 确保理解报告内容。如果不确定其含义,请要求提供详细信息。即使是第三方报告者通常也愿意花时间解释问题所在,并指导你研究正确的修复方法。
  2. 尽可能保持更改范围最小化。这将使你后续审查更加容易。
  3. 测试你的插件。确保安全修复不会破坏其他功能。确保升级不会导致奇怪的错误。保持 WP_DEBUG 开启并记录所有错误。
  4. 在更新日志中记录该问题。无需包含具体细节,但需注明已解决安全问题。
  5. 在 README 中鸣谢报告者。这是友好的做法,能促使人们未来更愿意免费帮助你。
  6. 更新版本号。我们推荐使用语义化版本控制,因此针对插件 3.9 版本的安全更新应将版本号更改为 3.9.1,依此类推。

自动插件安全更新

自 WordPress 3.7 起,我们已具备推送插件自动安全更新的能力,以修复插件中的关键漏洞。许多站点已利用插件自动更新功能,无论是直接通过过滤器选择启用,还是使用众多可用的 WordPress 远程管理服务之一。

在极端情况下,插件团队和 WordPress 安全团队可能判定某个插件问题足够严重,必须为所有用户进行更新。这种情况极为罕见,因为潜在的冲突风险很高。

批准插件进行自动更新并将其推送给 WordPress 用户的过程高度依赖人工操作。安全团队会审查发布中的所有代码变更,验证问题及其修复方案,并确认插件触发更新是安全的。推出自动更新需要修改和部署 API 代码。这与核心安全版本的标准和流程相同。

评判标准

当前我们评估安全推送的考量标准是一个简洁的清单:

  1. 安全团队是否已获悉该问题?
  2. 问题的严重程度如何?对 WordPress 安装的安全性乃至更广泛的互联网会产生什么影响?
  3. 问题的修复是否独立自洽,还是会添加大量无关的额外代码?
  4. 如果插件的多个分支都受到影响,是否为每个分支都准备了发布版本?
  5. 更新能否安全地自动安装?

这些要求以任何人都能逐项确认的方式定义。

第一条标准——让安全团队知晓问题——至关重要。由于这是一个严格受控的流程,WordPress 安全团队需要尽早收到通知。只需将详情发送邮件至 plugins@wordpress.org 即可告知我们。

插件团队和安全团队将与插件作者(以及报告者,若非同一人)协作,研究漏洞及其具体暴露方式,验证提议的修复方案,并确定将发布哪些版本以及发布时间。

常见问题

如何申请插件自动更新?

如果您认为您的插件拥有足够庞大的用户群,或相关问题具有重大意义,请在推送代码之前发送邮件至 plugin@wordpress.org。邮件中需包含待审核的修改补丁,并说明您认为应实现自动更新的理由。

我能否在自动更新中包含安全修复之外的其他更改?

除少数例外情况外,不可以。安全推送应包含与安全相关的内容。我们更倾向于(且多数情况下要求)插件发布版本修复安全问题,进行最少的代码修改,且不包含无关更改。

这使每个人都能快速审查变更,并对变更更有信心。同时,这也意味着对用户造成的干扰最小。

为什么插件 A 获得了自动更新,而插件 B 却没有?

这并非 WordPress.org 的偏见,只是我们一直使用的手动流程的遗留问题。如果我们收到问题警报,我们会努力处理。如果几天后才发现,推出修复的机会窗口通常已经过去,效果也会大打折扣。

如何禁用自动更新?

有多种方法可以禁用此功能。适用于禁用核心自动更新的文章同样适用。任何禁用所有自动更新功能的方法都会阻止插件更新。如果您只想禁用插件更新,无论是针对所有插件还是单个插件,都可以通过一个过滤器调用来实现。

如果无法(或不想)修复代码怎么办?

您无需修复。您的插件将保持关闭状态,2-3个月后,插件页面会显示因安全问题而关闭。若您希望推送修复但保持插件关闭,我们也可以处理。只需回复邮件与我们沟通即可。

我只需要修复报告的问题吗?

是也不是。你_确实_需要修复报告的问题,但完成后,我们会重新审查插件的_全部_代码。如果发现更多问题,你同样需要修复它们。最终目标是确保重新开放的插件是安全的。

如果我的插件存在规范问题怎么办?

当用户违反其他规范时会出现这种情况,例如包含自己的 jQuery 副本或进行未记录的外部服务调用。这取决于其他问题的严重程度。如果只是您自己的 jQuery 问题,我们可能会重新开放插件并允许您自行修复。但如果您记录了插件的所有安装信息,则必须在重新开放插件前修正此问题。