安全
在此免费白皮书中了解更多有关WordPress核心软件安全性的信息。您也可以在中下载PDF格式.
概述
本文档是对WordPress核心软件开发及其相关安全流程的分析和解释,以及对直接内置于软件中的固有安全性的检查。评估WordPress作为内容管理系统或web应用程序框架的决策者应在其分析和决策中使用此文档,并供开发人员参考,以熟悉软件的安全组件和最佳实践。
本文档中的信息是发布时WordPress 4.7软件最新稳定版本的最新信息,但也应考虑与最新版本的软件相关,因为向后兼容性是WordPres开发团队的重点。当在特定版本中添加到核心软件中时,将注意到特定的安全措施和更改。强烈建议您始终运行WordPress的最新稳定版本,以确保获得尽可能安全的体验。
执行摘要
WordPress是一个动态的开源内容管理系统,用于支持数以百万计的网站、web应用程序和博客。它目前为互联网上排名前1000万的网站中超过43%的网站提供服务。WordPress的可用性、可扩展性和成熟的开发社区使其成为各种规模网站的流行和安全选择。
自2003年成立以来,WordPress经历了不断的强化,因此其核心软件可以解决和缓解常见的安全威胁,包括本文档中讨论的由开放式Web应用程序安全项目(OWASP)确定为常见安全漏洞的十大列表。
WordPress安全团队与WordPressCore Leadership Team合作,并得到WordPress.org全球社区的支持,致力于识别和解决可在WordPress-org上发布和安装的核心软件中的安全问题,以及为第三方插件和主题作者推荐和记录安全最佳实践。
站点开发人员和管理员应特别注意核心API和底层服务器配置的正确使用,这些都是常见漏洞的来源,并确保所有用户使用强密码访问WordPress。
WordPress概述
WordPress是一个免费的开源内容管理系统(CMS)。它是世界上使用最广泛的CMS软件,为超过43%的前1000万网站提供支持1,使其在所有使用CMS的网站中占据估计62%的市场份额。
WordPress是根据通用公共许可证(GPLv2或更高版本)授权的,该许可证提供四个核心自由,可以被视为WordPres的“权利法案”:
- 出于任何目的运行程序的自由。
- 可以自由地研究程序的工作原理,并根据自己的意愿进行更改。
- 重新分配的自由。
- 向他人分发修改版本副本的自由。
WordPress核心领导团队
WordPress项目是一个精英管理体系,由一个核心领导团队管理,由其联合创建者和首席开发人员马特·穆伦韦(Matt Mullenweg)领导。团队管理项目的所有方面,包括核心开发、WordPress.org和社区计划。
核心领导团队由Matt Mullenweg、五名首席开发人员和十几名拥有永久提交权限的核心开发人员组成。这些开发人员拥有技术决策的最终权力,并领导架构讨论和实现工作。
WordPress有许多有贡献的开发人员。其中一些是以前或现在的提交人,还有一些可能是未来的提交人。这些贡献者是WordPress值得信赖的资深贡献者,他们在同行中赢得了极大的尊重。根据需要,WordPress也有访客提交者,他们被授予临时或试用提交权限,有时用于特定组件。
核心和贡献开发人员主要指导WordPress的开发。每一个版本都有数百名开发人员为WordPress贡献代码。这些核心贡献者是以某种方式贡献核心代码库的志愿者。
WordPress发布周期
每个WordPress发布周期都由一个或多个核心WordPres开发人员领导。从最初的范围界定会议到版本发布,发布周期通常持续约4个月。
发布周期遵循以下模式2:
- 阶段1:规划和确保团队领导。这是在Slack上的#核心聊天室中完成的。发布负责人讨论了WordPress下一版本的功能。WordPress的贡献者参与了这场讨论。发布负责人将确定每个功能的团队负责人。
- 阶段2:开发工作开始。团队负责人召集团队并处理分配给他们的功能。定期聊天是为了确保发展继续向前发展。
- 阶段3:Beta。发布beta,并要求beta测试人员开始报告错误。从这个阶段开始,不再提交新的增强功能或功能请求。鼓励第三方插件和主题作者针对即将发生的更改测试他们的代码。
- 阶段4:发布候选。从现在起,可翻译字符串将被冻结。工作仅针对回归和阻塞器。
- 阶段5:启动。WordPress版本已启动,并可在WordPressAdmin中进行更新。
版本编号和安全发布
WordPress的主要版本由前两个序列决定。例如,3.5是主要版本,3.6、3.7或4.0也是主要版本。没有“WordPress 3”或“WordPrins 4”,每个主要版本都是通过编号来引用的,例如“WordPublishs 3.9”
主要版本可能会添加新的用户功能和开发人员API。虽然通常在软件世界中,“主要”版本意味着可以打破向后兼容性,但WordPress力求永远不要打破向后兼容性。向后兼容性是项目最重要的理念之一,目的是让用户和开发人员更容易进行更新。
次要的WordPress版本由第三个序列决定。版本3.5.1是一个次要版本,如3.4.2三。次要版本仅用于修复安全漏洞和解决关键错误。由于WordPress的新版本发布如此频繁,目标是每4-5个月发布一次主要版本,而次要版本则根据需要发布,因此只需要发布主要版本和次要版本。
版本向后兼容性
WordPress项目致力于向后兼容。这一承诺意味着当WordPress核心软件更新时,主题、插件和自定义代码将继续运行,鼓励网站所有者将其WordPres版本更新为最新的安全版本。
WordPress和安全
WordPress安全团队
WordPress安全团队由大约50名专家组成,其中包括首席开发人员和安全研究人员,大约一半是Automatic(WordPress.com的制造商,WordPress.com是最早和最大的web托管平台)的员工,还有一些在web安全领域工作的人员。该团队咨询了知名且值得信赖的安全研究人员和托管公司三.
WordPress安全团队经常与其他安全团队合作解决常见依赖项中的问题,例如解决WordPress3.9.2中由WordPres附带的XML-RPC API使用的PHP XML解析器中的漏洞4此漏洞解决方案是WordPress和Drupal安全团队共同努力的结果。
WordPress安全风险、过程和历史
WordPress安全团队相信负责任的披露,它会立即提醒安全团队任何潜在的漏洞。潜在的安全漏洞可以通过WordPress黑客一号5。安全团队通过私人Slack频道进行沟通,并在隔离的私人Trac上工作,以跟踪、测试和修复错误和安全问题。
每个安全报告在收到时都会得到确认,团队会验证漏洞并确定其严重性。如果得到确认,安全团队会计划修补程序来修复该问题,该修补程序可以提交给WordPress软件的下一个版本,也可以根据问题的严重程度将其作为即时安全版本发布。
为了立即发布安全消息,安全团队会在WordPress.org新闻网站上发布公告6宣布发布并详细说明更改。咨询中对负责任地披露漏洞给予了赞扬,以鼓励和加强今后继续进行负责任的报告。
当新版本可用时,WordPress软件的管理员会在其站点仪表板上看到一条升级通知,并且在手动升级后,用户会被重定向到关于WordPres屏幕,该屏幕详细介绍了更改。如果管理员启用了自动后台更新,他们将在升级完成后收到一封电子邮件。
安全版本的自动后台更新
从3.7版开始,WordPress为所有次要版本引入了自动后台更新7如3.7.1和3.7.2。WordPress安全团队可以识别、修复和推出WordPres的自动安全增强功能,而站点所有者无需在其端执行任何操作,安全更新将自动安装。
当为当前稳定版本的WordPress推送安全更新时,核心团队还将推送能够进行后台更新的所有版本的安全更新(自WordPress3.7以来),因此这些较旧但仍然是最新版本的WordPress将获得安全增强。
个人网站所有者可以选择通过简单更改配置文件来删除自动后台更新,但核心团队强烈建议保留该功能,并运行WordPress的最新稳定版本。
2013年OWASP前10名
Open Web Application Security Project(OWASP)是一个致力于Web应用程序安全的在线社区。OWASP前10名列表8重点是为各种组织识别最严重的应用程序安全风险。结合对可利用性、可探测性和影响估计的共识估计,选择并优先考虑前10项。
以下部分讨论了WordPress用来增强核心软件和第三方插件以及主题以应对这些潜在风险的API、资源和策略。
A1–喷射
WordPress中有一组函数和API可用于帮助开发人员确保无法注入未经授权的代码,并帮助他们验证和清理数据。提供最佳实践和文档9介绍如何使用这些API来保护、验证或清理HTML、URL、HTTP标头中的输入和输出数据,以及在与数据库和文件系统交互时如何使用这些APIs。管理员还可以进一步限制可以通过过滤器上传的文件类型。
A2–断开的身份验证和会话管理
WordPress核心软件管理用户帐户和身份验证,用户ID、姓名和密码等详细信息以及身份验证Cookie在服务器端进行管理。密码在数据库中使用标准盐渍和拉伸技术进行保护。对于4.0之后的WordPress版本,现有会话在注销时被销毁。
A3–跨站点脚本(XSS)
WordPress提供了一系列功能,可以帮助确保用户提供的数据是安全的10。受信任的用户,即单个WordPress安装上的管理员和编辑,以及WordPressMultisite中的网络管理员,可以根据需要发布未过滤的HTML或JavaScript,例如在帖子或页面中。默认情况下,将筛选不受信任的用户和用户提交的内容,以删除危险实体,方法是通过wp_kses(_K)
功能。
例如,WordPress核心团队在WordPress2.3发布之前注意到搜索查询()
被大多数主题作者滥用,他们没有逃逸函数的输出以便在HTML中使用。在极少数稍微破坏向后兼容性的情况下,函数的输出在WordPress 2.3中被更改为预先转义。
A4–不安全直接对象引用
WordPress通常提供直接的对象引用,例如用户帐户的唯一数字标识符或URL或表单字段中可用的内容。虽然这些标识符公开了直接的系统信息,但WordPress丰富的权限和访问控制系统可以防止未经授权的请求。
A5–安全配置错误
大多数WordPress安全配置操作仅限于单个授权管理员。WordPress的默认设置将在核心团队级别上持续评估,WordPres核心团队提供文档和最佳实践,以加强运行WordPress站点的服务器配置的安全性11.
A6–敏感数据暴露
WordPress用户帐户密码根据便携式PHP密码散列框架进行盐析和散列12WordPress的权限系统用于控制对私人信息的访问,如注册用户的PII、评论员的电子邮件地址、私人发布的内容等。在WordPress3.7中,核心软件中包含一个密码强度测试仪,为用户设置密码提供额外信息,并提示增加强度。WordPress还有一个可选的配置设置,用于要求HTTPS。
A7–缺少功能级访问控制
WordPress在执行操作之前检查任何功能级访问请求的适当授权和权限。未经适当身份验证的管理URL、菜单和页面的访问或可视化与身份验证系统紧密集成,以防止未经授权的用户访问。
A8–跨站点请求伪造(CSRF)
WordPress使用称为nonce的加密令牌13,验证授权用户的行动请求意图,以防范潜在的CSRF威胁。WordPress为生成这些令牌提供了一个API,用于创建和验证唯一的临时令牌,令牌仅限于特定用户、特定操作、特定对象和特定时间段,可以根据需要添加到表单和URL。此外,所有nonce在注销时都将失效。
A9–使用具有已知漏洞的组件
WordPress核心团队密切监控WordPres与之集成的为数不多的库和框架的核心功能。过去,核心团队为几个第三方组件做出了贡献,以使其更加安全,例如WordPress 3.5.2中修复TinyMCE中跨站点漏洞的更新14.
如有必要,核心团队可以决定分叉或更换关键的外部组件,例如在3.5.2中SWFUpload库被Plupload库正式替换,并且安全团队提供了SWFUpload的安全分叉15对于那些短期内继续使用SWFUpload的插件。
A10–未验证的重定向和转发
WordPress的内部访问控制和身份验证系统将防止将用户引导到不想要的目的地或自动重定向的尝试。插件开发人员也可以通过API使用此功能wp_safe_reredirect()
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网站上列出了大约50000+个插件和5000+个主题。这些主题和插件被提交以供包含,并由志愿者手动审查,然后在存储库中提供。
在存储库中包含插件和主题并不能保证它们没有安全漏洞。为插件作者提供了指南,供其在提交到存储库中之前进行咨询17,以及关于如何进行WordPress主题开发的大量文档18在WordPress.org网站上提供。
每个插件和主题都可以由插件或主题所有者持续开发,任何后续的修复或功能开发都可以上传到存储库中,并提供给安装了该插件或主题的用户,并附带该更改的描述。站点管理员会收到需要通过其管理仪表板更新插件的通知。
当WordPress安全团队发现插件漏洞时,他们会联系插件作者,共同修复并发布插件的安全版本。如果插件作者没有响应或漏洞严重,插件/主题将从公共目录中提取,在某些情况下,由安全团队直接修复和更新。
主题审查小组
主题审查小组是一组志愿者,由WordPress社区的关键和既定成员领导,他们审查和批准提交的主题,以纳入WordPressTheme官方目录。主题审查团队维护正式的主题审查指南19,主题单元测试数据20和主题检查插件21,并试图让WordPress主题开发人员社区了解开发最佳实践。小组的参与由WordPress开发团队的核心提交人负责。
托管提供商在WordPress安全中的角色
WordPress可以安装在多种平台上。虽然WordPress核心软件为操作安全的web应用程序提供了许多规定,这在本文档中都有介绍,但操作系统和承载该软件的底层web服务器的配置对于保持WordPres应用程序的安全同样重要。
关于WordPress.com和WordPress安全性的说明
WordPress.com是世界上最大的WordPress安装,由Automatic,Inc.拥有和管理,Automatic是由WordPres项目联合创建者Matt Mullenweg创建的。WordPress.com运行在核心WordPress软件上,有自己的安全流程、风险和解决方案22。本文档涉及WordPress.org提供的可下载自托管开源WordPress软件的安全性,该软件可安装在世界上的任何服务器上。
附录
核心WordPress API
WordPress核心应用程序编程接口(API)由几个单独的API组成23每一个都涵盖了给定功能集所涉及的功能和使用。这些共同构成了项目界面,允许插件和主题安全地与WordPress核心功能交互、更改和扩展。
虽然每个WordPress API都提供了最佳实践和标准化方法来与WordPres核心软件交互和扩展,但以下WordPressAPI与加强WordPress安全性最为相关:
数据库应用程序接口
数据库API24WordPress 0.71中添加的,提供了正确的方法来访问存储在数据库层中的命名值数据。
文件系统API
文件系统API25,在WordPress 2.6中添加26,最初是为WordPress自己的自动更新功能创建的。文件系统API抽象出在各种主机类型上安全地将本地文件读写到文件系统所需的功能。
它通过WP_文件系统_基础
类和几个子类,它们实现了连接到本地文件系统的不同方式,具体取决于单个主机的支持。任何需要在本地写入文件的主题或插件都应该使用WP_Filesystem类家族来完成。
HTTP API
HTTP API27,在WordPress 2.7中添加28并在WordPress 2.8中进一步扩展,使WordPres的HTTP请求标准化。API处理cookie、gzip编码和解码、块解码(如果是HTTP 1.1)以及各种其他HTTP协议实现。API标准化请求,在发送之前测试每个方法,并根据您的服务器配置,使用适当的方法发出请求。
权限和当前用户API
权限和当前用户API29是一组功能,有助于验证当前用户执行所请求的任何任务或操作的权限,并可以进一步防止未经授权的用户访问或执行超出其允许能力的功能。
白皮书内容许可证
本文档中的文本(不包括WordPress徽标或商标)根据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月
脚注