WordPress.org

About

Security

安全

在这份免费白皮书中了解有关 WordPress 核心软件安全性的更多信息。您还可以下载 PDF 格式的白皮书。

概述

本文档是对WordPress核心软件开发及其相关安全流程的分析和说明,也是对软件直接内置的固有安全的检查。评估WordPress作为内容管理系统或WEB应用框架的决策者应通过本文档进行分析和决策,开发者也可以参考本文档来熟悉软件的安全组件和最佳实践。

本文档中的信息是软件的最新稳定版本,即WordPress 4.7版本发布时的最新信息,但由于向后兼容性是WordPress开发团队的重点,因此也应该被认为与最新版本的软件相关。由于已将特定的安全补丁和更改添加到特定版本的核心软件中,因此要予以注意。强烈鼓励大家始终运行最新的WordPress稳定版本,以确保尽可能的安全体验。

内容摘要

WordPress 是一种动态开源内容管理系统,用于为数以百万计的网站、网络应用程序和博客提供支持。目前,在互联网上排名前 1000 万的网站中,43% 以上的网站都使用了该系统。WordPress 的可用性、可扩展性和成熟的开发社区使其成为各种规模网站的流行和安全之选。

自 2003 年成立以来,WordPress 经历了不断的加固,其核心软件能够处理和减轻常见的安全威胁,包括在开放 Web 应用程序安全项目(OWASP)中列出的十大常见安全漏洞,本文将对此进行讨论。

WordPress安全团队与WordPress核心领导团队合作,在WordPress全球社区的支持下,致力于真别和解决可在WordPress.org上发布和安装的核心软件中的安全问题,并为第三方插件和主题作者推荐和记录安全最佳实践。

站点开发者和管理员应特别注意正确使用核心API和底层服务器配置,这些都是常见漏洞的根源,同时确保所有用户使用强密码来访问WordPress。

WordPress 概述

WordPress 是一个免费的开源内容管理系统(CMS)。它是世界上使用最广泛的内容管理系统(CMS)软件,在排名前 1000 万的网站中,WordPress 为 43%以上的网站提供支持1,估计在所有使用 CMS 的网站中占有 62%的市场份额。

WordPress 使用通用公共许可证(GPLv2 或更高版本)授权,该许可证提供了四项核心自由,将其是为WordPress的「权利法案」:

  1. 为任何目的运行程序的自由。
  2. 研究程序如何工作以及对其进行更改使其按照您的意愿运行的自由。
  3. 重新分发的自由。
  4. 将您修改后的版本分发给他人的自由。

WordPress 核心领导团队

WordPress项目是一个优胜劣汰的项目,由一个核心领导团队管理,并由其联合创始人和首席开发者Matt Mullenweg领导。该团队管理项目的各个方面,包括核心开发、WordPress.org和社区活动。

核心领导团队由Matt Mullenweg,五位首席开发者和十几位拥有永久提交权限的核心开发者组成。这些开发者拥有技术决策的最终权力,并领导架构讨论和实施工作。

WordPress有许多贡献开发者,其中有些是以前的或现在的提交者,有些可能是未来的提交者。这些贡献开发者都是WordPress值得信赖的资深贡献者,他们在团队中拥有很高的信誉。根据需要,WordPress也有访客提交者,即被授予提交访问权的其他贡献者,有时是临时或试用的特定组件的提交访问权。

核心贡献者和贡献开发者主要指导WordPress的开发。每个版本,都有数百名开发者为WordPress贡献代码。这些核心贡献者都是志愿者,他们以某种方式为核心代码库做出贡献。

WordPress 的发布周期

每个 WordPress 版本发布周期由一个或多个核心 WordPress 开发者领头。发布周期从最初的范围界定会议到版本发布通常需要4个月左右。

版本周期遵循以下模式2

  • 阶段1:规划并确保团队领导。这是在Slack上的#core频道讨论中进行的。发布负责人讨论WordPress下一个版本的功能及特性。WordPress的贡献者们也会参与到讨论中。发布负责人将为每个功能的团队确定负责人。
  • 阶段2:开发工作开始。团队负责人组建团队,并就其分配的功能开展工作。定期举行讨论会议,以确保开发工作不断向前推进。
  • 阶段3:测试。发布 Beta 测试版本,并要求 Beta 测试者开始报告错误。从此阶段开始,不再进行新的增强功能或功能请求的提交。我们鼓励第三方插件和主题作者根据即将到来的更新测试其代码。
  • 阶段4:发布候选。从这一阶段开始,将不再添加新的可翻译字符串。开发工作将进入回归测试和重大漏洞修复阶段。
  • 阶段5:启动。发布 WordPress 版本,并在 WordPress 管理中提供更新。

版本号和安全发布

WordPress 的主要版本由前两个序列决定。例如,3.5 是一个主要版本,3.6 、 3.7 或 4.0 也是一个主要版本。没有「WordPress 3」或「WordPress 4」,每个主要版本都以其编号表示,例如「WordPress 3.9」。

主要版本可能会添加新的用户功能和开发者应用程序接口。虽然在软件世界中,「主要」版本通常意味着可以打破向后兼容性,但 WordPress 努力做到永远不打破向后兼容性。向后兼容性是该项目最重要的理念之一,目的是让用户和开发人员都能更轻松地进行更新。

WordPress 的次要版本由第三序列决定。3.5.1 版和 3.4.2 版都是次要版本3。次版本仅用于修复安全漏洞和解决关键错误。由于 WordPress 的新版本发布非常频繁(目标是每 4-5 个月发布一次大版本,小版本则根据需要发布),因此只需要发布大版本和小版本。

版本向后兼容性

WordPress项目对向后兼容性有坚定的承诺。这一承诺意味着,当WordPress核心软件更新时,主题、插件和自定义代码仍能继续运行,并鼓励网站所有者将他们的WordPress版本更新到最新的安全版本。

WordPress 与安全

WordPress 安全团队

WordPress 安全团队由包括首席开发人员和安全研究人员在内的大约 50 名专家组成,其中大约一半是 Automattic(WordPress.com 的制造商,WordPress.com 是网络上最早和最大的 WordPress 托管平台)的员工,还有一些人在网络安全领域工作。该团队与知名的、值得信赖的安全研究人员和托管公司3进行磋商。

WordPress 安全团队经常与其他安全团队合作解决共同依赖项中的问题,例如在 WordPress 3.9.24中解决了 PHP xml 解析器中的漏洞,该解析器被 WordPress 附带的 XML-RPC API 使用。该漏洞的解决是 WordPress 和 Drupal 安全团队共同努力的结果。

WordPress 安全风险、流程和历史

WordPress 安全团队信奉「负责任的披露」,即在发现任何潜在漏洞时立即通知安全团队。潜在的安全漏洞可以通过 WordPress HackerOne5向安全团队发出通报。安全团队内部通过私密 Slack 频道进行交流,并在与外界隔离的私密 Trac 上跟踪、测试和修复漏洞和安全问题。

每个安全报告在收到后都会被确认,团队会努力验证漏洞并确定其严重性。如果得到确认,安全团队就会计划提供一个补丁来修复问题,该补丁可以提交至即将发布的WordPress版本,也可以根据问题的严重性,将其作为一个即时的安全维护版本推送。

对于即时安全发布,安全团队会在 WordPress.org 新闻网站6上发布通知,宣布发布并详细说明更改。为了鼓励和加强今后继续负责任地报告漏洞,我们会在公告中对负责任地披露漏洞的行为给予肯定。

当有新版本可用时,WordPress 软件的管理员会在其网站仪表盘上看到一条有关升级的通知,并且在进行手动升级后,用户将被重定向到「关于WordPress」屏幕,其中会对改进进行详细介绍。 如果管理员启用了自动后台更新,则他们将在升级完成后收到一封电子邮件。

安全发布的自动后台更新

从 3.7 版开始,WordPress 对所有次发行版7(如 3.7.1 和 3.7.2)引入了自动后台更新。WordPress 安全团队可以识别、修复并自动推送 WordPress 的安全增强功能,网站所有者无需做任何事情,安全更新就会自动安装。

当WordPress的当前主要版本有安全更新推送时,核心团队也会为所有自WordPress3.7起能够进行后台更新的主要版本推送安全更新,因此WordPress的叫就主要版本的最新次要版本仍然会获得最新的安全家强和补丁修复。

个人站长可以选择通过简单的修改配置文件来移除后台自动更新功能,但核心团队强烈建议保留该功能,同时运行最新稳定版本的WordPress。

2013 OWASP Top 10

开放式网络应用安全项目(OWASP)是一个致力于网络应用安全的在线社区。OWASP Top 10 列表8的重点是为各种组织确定最严重的应用程序安全风险。结合对可利用性、可检测性和影响估计的一致估计,选出了 10 大项目并对其进行了优先排序。

以下部分说明了WordPress用来加强核心软件和第三方插件和主题的API、资源及政策,以应对这些潜在的风险。

A1 – 注入

WordPress 中提供了一系列函数和 API,可帮助开发人员确保未经授权的代码无法注入,并帮助他们验证和净化数据。关于如何使用这些 API 来保护、验证或净化 HTML 、 URL 、 HTTP 标头以及与数据库和文件系统交互时的输入和输出数据,我们提供了最佳实践和文档9。管理员还可以通过过滤器进一步限制可上传的文件类型。

A2 – 中断的身份验证和会话管理

WordPress核心软件管理用户账户和身份验证,并在服务器端管理用户ID、名称和密码等详细信息以及身份验证cookies。密码在数据库中使用标准的盐化和扩展技术进行保护。对于4.0之后的WordPress版本,现有的会话会在注销时被销毁。

A3 – 跨站脚本(XSS)

WordPress 提供了一系列函数,可帮助确保用户提供的数据是安全的10。受信任的用户,即单个 WordPress 安装中的管理员和编辑,以及 WordPress 多站点中的网络管理员,可以根据需要发布未经过滤的 HTML 或 JavaScript,例如在帖子或页面中。通过 wp_kses 函数使用 KSES 库,默认情况下会对不受信任的用户和用户提交的内容进行过滤,以移除危险实体。

举例来说,WordPress 核心团队在 WordPress 2.3 发布之前就注意到,函数 the_search_query()被大多数主题作者滥用,因为他们没有将函数的输出转义为 HTML 格式。在极少数情况下,WordPress 2.3 会稍微破坏向后兼容性,将函数输出改为预转义。

A4 – 不安全的直接对象引用

WordPress 经常提供直接对象引用,例如用户账户的唯一数字标识符或网址或表单字段中的可用内容。虽然这些标识符披露了直接的系统信息,但 WordPress 丰富的权限和访问控制系统可以防止未经授权的请求。

A5 – 安全性配置错误

WordPress 的大部分安全配置操作仅限单个授权管理员进行。WordPress 的默认设置会在核心团队层面不断进行评估,WordPress 核心团队会提供文档和最佳实践,以加强运行 WordPress 网站的服务器配置的安全性11

A6 – 敏感数据泄露

WordPress 用户账户密码根据可移植 PHP 密码散列框架(Portable PHP Password Hashing Framework)12进行加盐和散列处理。WordPress 的权限系统用于控制对私人信息的访问,如注册用户的 PII 、评论者的电子邮件地址、私密发布的内容等。在 WordPress 3.7 中,核心软件中加入了密码强度计,为用户设置密码提供额外信息,并提示如何提高密码强度。WordPress 还有一个要求使用 HTTPS 的可选配置设置。

A7 – 缺少功能级访问控制

在执行操作之前,WordPress会检查任何函数级访问请求的授权和权限。在没有经过认证的情况下访问或查看管理URL、菜单和页面时,会与认证系统紧密结合,以防止未经授权的用户访问。

A8 – 跨站请求伪造攻击

WordPress 使用称为 nonces 的加密令牌13来验证授权用户的操作请求意图,以防范潜在的 CSRF 威胁。WordPress 提供了生成这些令牌的 API,用于创建和验证唯一的临时令牌,令牌仅限于特定用户、特定操作、特定对象和特定时间段,可根据需要添加到表单和 URL 中。此外,所有非 ces 都会在注销时失效。

A9 – 使用具有已知漏洞的组件

WordPress 核心团队密切关注 WordPress 为实现核心功能而集成的几个内含库和框架。在过去,核心团队对几个第三方组件做出了贡献,以提高它们的安全性,例如在 WordPress 3.5.214中修复 TinyMCE 跨站点漏洞的更新。

如有必要,核心团队可能会决定分叉或替换关键的外部组件,例如当 SWFUpload 库在 3.5.2 中被 Plupload 库正式替换时,安全团队为那些在短期内继续使用 SWFUpload 的插件提供了 SWFUpload 的安全分叉15

A10 – 未经验证的重定向和转发

WordPress 的内部访问控制和身份验证系统可防止试图将用户引导到不需要的目的地或自动重定向的行为。插件开发人员也可通过 API(wp_safe_redirect()16)使用此功能。

更多安全风险和问题

XXE(XML外部实体)扩展攻击

在处理 xml 时,WordPress 会禁止加载自定义 xml 实体,以防止外部实体和实体扩展攻击。除了 PHP 的核心功能外,WordPress 没有为插件作者提供额外的安全 xml 处理 API。

SSRF(服务端请求伪造)攻击

对WordPress发出的HTTP请求进行过滤,以防止访问环回和私有IP地址。此外,只允许访问某些标准HTTP端口。

WordPress 插件和主题的安全性

默认主题

WordPress 需要启用主题才能在前端显示内容。出于安全考虑,WordPress 内核的默认主题(目前为「Twenty Twenty-Three」)已经过主题开发团队和核心开发团队的严格审核和测试。

默认主题可以作为自定义主题开发的起点,站点开发者可以创建子主题,该子主题包括一些自定义内容,但大多数功能和安全性都依赖于默认主题。如果不需要,管理员可以很容易地删除默认主题。

WordPress.org 主题和插件库

WordPress.org 网站上列出了大约 50,000 多个插件和 5,000 多个主题。这些主题和插件都是为加入而提交的,并由志愿者进行人工审核,然后才会在资源库中提供。

将插件和主题包含在存储库中并不能保证它们没有安全漏洞。 为插件作者提供了在提交以包含在存储库中之前参考的指南17,以及有关如何操作的大量文档 WordPress.org 网站上提供了 WordPress 主题开发18

每个插件和主题都可以由插件或主题所有者持续开发,任何后续的修复或功能开发都可以上传到仓库,以提供给安装了该插件或主题的用户,并提供其说明和改进。占点管理员会通过其管理仪表盘看到需要更新插件的通知。

当WordPress安全团队发现插件漏洞时,他们会联系插件作者,共同修复并发布插件的安全版本。如果没有得到插件作者的回应,或者漏洞严重,则会将该插件/主题从公共目录中移除,在某些情况下,安全团队会直接修复和更新。

主题审核团队

主题审核团队是由 WordPress 社区的主要成员和知名成员领导的志愿者组成的小组,他们负责审核和批准提交到 WordPress 官方主题目录中的主题。主题审核小组负责维护官方的《主题审核指南》19 、《主题单元测试数据》20 和《主题检查插件》21 ,并尝试让 WordPress 主题开发者社区参与进来,了解有关开发的最佳实践。该小组由 WordPress 开发团队的核心提交者主持。

主机提供商在 WordPress 安全中的作用

WordPress可以安装在多种平台上。尽管WordPress核心软件提供了许多操作安全Web应用程序的规定,这些规定已在本文档中介绍,但操作系统和托管该软件的底层Web服务器的配置对于确保WordPress应用程序的安全同样重要。

关于 WordPress.com 和 WordPress 安全的说明

WordPress.com 是全球最大的 WordPress 安装网站,由 WordPress 项目联合创建者 Matt Mullenweg 创立的 Automattic 公司拥有和管理。WordPress.com 基于 WordPress 核心软件运行,有自己的安全流程、风险和解决方案22。本文档指的是与 WordPress.org 提供的可下载的自助托管开源 WordPress 软件有关的安全问题,该软件可安装在世界上的任何服务器上。

附录

核心 WordPress APIs

WordPress 核心应用程序编程接口(API)由多个单独的 API 组成23,每个 API 都涵盖了特定功能集合所涉及的功能和使用方法。这些 API 共同构成了项目接口,允许插件和主题安全可靠地与 WordPress 核心功能进行交互、更改和扩展。

虽然每个WordPress API都提供了与WordPress核心软件交互和扩展WordPress核心软件的最佳实践和标准化方法,但以下WordPress API与加强WordPress安全性最为相关:

数据库 API

在 WordPress 0.71 中添加的数据库 API24提供了以命名值形式访问存储在数据库层中的数据的正确方法。

文件系统 API

文件系统 API25在 WordPress 2.626中添加,最初是为 WordPress 自己的自动更新功能而创建的。文件系统应用程序接口(Filesystem API)抽象出了在各种主机类型上安全读写本地文件到文件系统所需的功能。

它通过 WP_Filesystem_Base 类和几个子类来实现这一点,这些子类根据各个主机的支持情况,实现了连接到本地文件系统的不同方法。任何需要在本地写入文件的主题或插件都应使用 WP_Filesystem 系列类。

HTTP API

HTTP API27在 WordPress 2.728中添加,并在 WordPress 2.8 中进一步扩展,它规范了 WordPress 的 HTTP 请求。该应用程序接口处理 cookie 、 gzip 编码和解码、大块解码(如果是 HTTP 1.1)以及其他各种 HTTP 协议实现。应用程序接口对请求进行标准化,在发送之前对每种方法进行测试,并根据服务器配置,使用适当的方法发出请求。

权限和当前用户 API

权限和当前用户 API29是一组函数,有助于验证当前用户执行任何任务或操作请求的权限和授权,并可进一步防止未经授权的用户访问或执行超出其许可能力的功能。

白皮书内容许可证

本文档中的文本(不包括 WordPress 徽标或商标)采用 CC0 1.0 Universal (CC0 1.0) 公共领域专用许可。您可以复制、修改、分发和执行该作品,甚至用于商业目的,而无需征得许可。

特别感谢 Drupal 的安全白皮书,它提供了一些灵感。

其他阅读


Authored bySara Rosso

供稿:Barry Abrahamson 、 Michael Adams 、 Jon Cave 、 Helen Hou-Sandí、 Dion Hulse 、 Mo Jangda 、 Paul Maiorana

2015 年 3 月 1.0 版


脚注

[1]https://w3techs.com/,截至 2019年12月

[2]https://make.wordpress.org/core/handbook/about/release-cycle/

[3]https://make.wordpress.org/core/handbook/about/release-cycle/version-numbering/

[4]https://wordpress.org/news/2014/08/wordpress-3-9-2/

[5]https://hackerone.com/wordpress

[6]https://wpfast.org/news/

[7] https://wordpress.org/news/2013/10/basie/

[8]https://www.owasp.org/index.php/Top_10_2013-Top_10

[9]https://developer.wordpress.org/apis/security/

[10]https://developer.wordpress.org/apis/security/data-validation/

[11]https://wordpress.org/support/article/hardening-wordpress/

[12]https://www.openwall.com/phpass/

[13]https://developer.wordpress.org/apis/security/nonces/

[14]https://wordpress.org/news/2013/06/wordpress-3-5-2/

[15]https://make.wordpress.org/core/2013/06/21/secure-swfupload/

[16]https://developer.wordpress.org/reference/functions/wp_safe_redirect/

[17] https://wpfast.org/plugins/developers/

[18]https://developer.wordpress.org/themes/getting-started/

[19]https://make.wordpress.org/themes/handbook/review/

[20]https://codex.wpfast.org/Theme_Unit_Test

[21]https://wpfast.org/plugins/theme-check/

[22]https://automattic.com/security/

[23]https://codex.wpfast.org/WordPress_APIs

[24]https://developer.wordpress.org/apis/handbook/database/

[25]https://codex.wpfast.org/Filesystem_API

[26]https://wordpress.org/support/wordpress-version/version-2-6/

[27] https://developer.wordpress.org/plugins/http-api/

[28] https://wordpress.org/support/wordpress-version/version-2-7/

[29]https://developer.wordpress.org/reference/functions/current_user_can/