安全

了解更多关于WordPress核心软件安全在这个免费白皮书。你也可以下载PDF格式

概述

本文档对WordPress核心软件开发及其相关安全流程进行了分析和解释,并对直接构建到软件中的固有安全进行了检查。决策者在评估WordPress作为内容管理系统或web应用框架时应该使用本文档进行分析和决策,开发人员也可以参考本文档来熟悉该软件的安全组件和最佳实践。

本文档中的信息是WordPress 4.7最新稳定版本的最新信息,但也应该被认为与该软件的最新版本相关,因为向后兼容性是WordPress开发团队的一个重点。特定的安全措施和更改将在特定版本中添加到核心软件时被注意到。强烈建议始终运行最新的稳定版本的WordPress,以确保最安全的体验可能。

执行概要

WordPress是一个动态的开源内容管理系统,它被用来支持数以百万计的网站、web应用程序和博客。目前,在互联网排名前1000万的网站中,有超过43%的网站都是由谷歌主导的。WordPress的可用性、扩展性和成熟的开发社区使它成为各种规模的网站的流行和安全的选择。

自2003年成立以来,WordPress经历了持续的加固,以使其核心软件能够解决和减轻常见的安全威胁,包括开放Web应用程序安全项目(OWASP)列出的常见安全漏洞前10名,本文将对此进行讨论。

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

网站开发人员和管理员应该特别注意正确使用核心api和底层服务器配置,这是常见漏洞的来源,还要确保所有用户使用强密码访问WordPress。

WordPress概述

WordPress是一个免费的开源内容管理系统(CMS)。它是世界上使用最广泛的CMS软件,超过43%的前1000万个网站使用它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上的#核心聊天室完成的。发布负责人讨论了WordPress下一个版本的特性。WordPress贡献者也参与了这个讨论。发布负责人将为每个特性确定团队负责人。
  • 阶段2:开发工作开始。团队领导组建团队,完成分配给他们的功能。计划定期聊天以确保开发持续进行。
  • 阶段3:β。beta版发布了,beta测试者被要求开始报告bug。从这个阶段开始,不再执行新的增强或特性请求的提交。鼓励第三方插件和主题作者针对即将到来的更改测试他们的代码。
  • 阶段4:发布候选版本。从此时起,可翻译字符串将被冻结。工作只针对回归和阻碍。
  • 第五阶段:启动。WordPress版本发布,并在WordPress管理员中提供更新。

版本编号和安全版本

主要的WordPress版本是由前两个序列决定的。例如,3.5是一个主要版本,与3.6、3.7或4.0一样。没有“WordPress 3”或“WordPress 4”,每个主要版本都是按编号来命名的,比如“WordPress 3.9”。

主要版本可能会添加新的用户特性和开发者api。虽然通常在软件世界中,一个“主要”版本意味着你可以打破向后兼容性,但WordPress永远不会打破向后兼容性。向后兼容是该项目最重要的理念之一,其目的是让用户和开发人员更容易地进行更新。

次要的WordPress版本由第三个序列决定。版本3.5.1是一个次要版本,与3.4.2一样3..一个小版本只用于修复安全漏洞和解决关键bug。由于WordPress的新版本发布得如此频繁——我们的目标是每4-5个月发布一次大版本,而小版本则根据需要发布——所以只需要大版本和小版本。

版本的向后兼容性

WordPress项目对向后兼容性有着强烈的承诺。这个承诺意味着当WordPress核心软件更新时,主题、插件和自定义代雷竞技码将继续发挥作用,鼓励网站所有者保持他们的WordPress版本更新到最新的安全版本。

WordPress和安全

WordPress安全团队

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

WordPress安全团队经常与其他安全团队合作解决常见依赖关系中的问题,比如解决WordPress 3.9.2中附带的XML- rpc API使用的PHP XML解析器中的漏洞4.这个漏洞的解决是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推送安全更新时,核心团队也会推送所有能够进行后台更新的版本的安全更新(从WordPress 3.7开始),所以这些较老但仍是最新版本的WordPress将获得安全增强。

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

2013 OWASP十佳

开放Web应用程序安全项目(OWASP)是一个致力于Web应用程序安全的在线社区。OWASP十大榜单8重点在于为广泛的组织识别最严重的应用程序安全风险。根据可利用性、可检测性和影响评估的共识,选择前10个项目并确定优先级。

下面的部分将讨论WordPress用来加强核心软件、第三方插件和主题以应对这些潜在风险的api、资源和策略。雷竞技

A1 -注射

WordPress中有一组可用的函数和api来帮助开发人员确保未经授权的代码不会被注入,并帮助他们验证和清理数据。最佳实践和文档是可用的9如何使用这些api来保护、验证或清理HTML、url、HTTP头中的输入和输出数据,以及在与数据库和文件系统交互时。管理员还可以进一步限制可以通过过滤器上传的文件类型。

A2 -失效的认证和会话管理

WordPress核心软件管理用户帐户和身份验证,用户ID、名称和密码等详细信息都在服务器端管理,还包括身份验证cookie。密码在数据库中使用标准的盐和拉伸技术来保护。对于4.0以后的WordPress版本,现有的会话会在注销时被销毁。

A3 -跨站点脚本编制(XSS)

WordPress提供了一系列的功能,可以帮助确保用户提供的数据是安全的10.受信任的用户,即单个WordPress安装上的管理员和编辑,以及仅在WordPress Multisite上的网络管理员,可以根据需要发布未经过滤的HTML或JavaScript,比如在一个帖子或页面内。缺省情况下,将过滤不受信任的用户和用户提交的内容,以删除危险的实体,使用KSES库通过wp_kses函数。

举个例子,WordPress核心团队在WordPress 2.3发布之前就注意到了这个功能the_search_query ()被大多数主题作者误用,他们没有转义函数的输出以在HTML中使用。在WordPress 2.3中,该函数的输出被修改为预先转义,这是一种非常罕见的稍微破坏向后兼容性的情况。

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

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

A5 -安全错误配置

WordPress的大多数安全配置操作仅限于一个授权的管理员。核心团队会不断评估WordPress的默认设置,并提供文档和最佳实践,以加强运行WordPress站点的服务器配置的安全性11

A6 -敏感数据暴露

WordPress用户帐户密码是基于PHP便携密码哈希框架进行加盐和哈希处理的12.WordPress的权限系统用于控制对私人信息的访问,如注册用户的PII,评论者的电子邮件地址,私人发布的内容等。在WordPress 3.7中,核心软件中包含了一个密码强度测量器,为用户设置密码和增加密码强度的提示提供额外信息。WordPress也有一个可选的设置要求使用HTTPS。

缺失功能级访问控制

在执行操作之前,WordPress会检查任何功能级访问请求的正确授权和权限。没有适当身份验证的管理url、菜单和页面的访问或可视化与身份验证系统紧密集成,以防止未经授权的用户访问。

A8 -伪造跨站请求(CSRF)

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

使用已知漏洞的组件

WordPress的核心团队密切监控着WordPress集成的几个库和框架,以实现核心功能。在过去,核心团队已经为几个第三方组件做出了贡献,以提高它们的安全性,例如更新以修复WordPress 3.5.2中TinyMCE的跨站漏洞14

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

A10 -未验证的重定向和转发

WordPress的内部访问控制和认证系统将防止用户被引导到不需要的目的地或自动重定向。插件开发者也可以通过API使用这个功能,wp_safe_redirect ()16

进一步的安全风险和关注

XXE (XML外部实体)处理攻击

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

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

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

WordPress插件和主题安全

默认的主题

WordPress需要启用一个主题,以便在前端显示内容。核心WordPress附带的默认主题(目前是“2222”)已经经过主题开发团队和核心开发团队的安全审查和测试。

默认主题可以作为自定义主题开发的起点,站点开发人员可以创建包含一些自定义的子主题,但为了大多数功能和安全性,可以使用默认主题。如果不需要,管理员可以很容易地删除默认主题。

org主题和插件仓库

在WordPress.org网站上有大约50,000+的插件和5雷竞技000 +的主题。这些主题和插件被提交进来,并由志愿雷竞技者手工审查,然后才可以在存储库中使用它们。

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

每个插件和主题都有能力由插件或主题所有者持续开发,任何后续的修复或特性开发都可以上传到存储库,并向安装了该插件或主题的用户提供该更改的描述。当插件需要更新时,网站管理员会通过他们的管理仪表板得到通知。雷竞技

当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核心api

WordPress核心应用程序编程接口(API)由几个独立的API组成23,每一个涵盖了一组给定功能所涉及的功能和使用的功能。这些共同构成了项目界面,允许插件和主题安全地交互、修改和扩展WordPress的核心功能。雷竞技

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

数据库API

数据库API24,提供了访问存储在数据库层的命名值数据的正确方法。

文件系统API

文件系统API25,在WordPress 2.6中添加26,最初是为WordPress自己的自动更新功能而创建的。Filesystem API抽象出在各种主机类型上安全地将本地文件读写到文件系统所需的功能。

它通过WP_Filesystem_Base类,以及几个子类,这些子类实现了连接到本地文件系统的不同方式,具体取决于各个主机的支持。任何需要在本地写文件的主题或插件都应该使用WP_Filesystem类家族来完成。

HTTP API

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

权限和当前用户API

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

白皮书内容

本文档中的文字(不包括WordPress logo或商标)是根据CC0 1.0通用(CC0 1.0)公共领域专用.您可以复制、修改、分发和执行该作品,甚至用于商业目的,所有这些都无需征得许可。

特别感谢Drupal安全白皮书,这给了我们一些启发。

更多的阅读


莎拉罗索

的贡献Barry Abrahamson, Michael Adams, Jon Cave, Helen Hou-Sandí, Dion Hulse, Mo Jangda, Paul Maiorana

1.0版2015年3月


脚注