WordPress 中 xmlrpc.php 的完整指南(它是什么、安全风险、如何禁用它)

已发表: 2020-07-06

XML-RPC WordPress 规范是为了标准化不同系统之间的通信而开发的,这意味着 WordPress 之外的应用程序(例如其他博客平台和桌面客户端)可以与 WordPress 交互。

该规范自 WordPress 成立以来一直是其一部分,并且做了非常有用的工作。 没有它,WordPress 将处于自己的孤岛中,与互联网的其他部分分开。

但是,xmlrpc.php 也有其缺点。 它可能会给您的 WordPress 网站带来漏洞,现在已被 WordPress REST API 取代,后者在将 WordPress 开放给其他应用程序方面做得更好。

在这篇文章中,我们将解释 xmlrpc.php 是什么,为什么要禁用它,并帮助您确定它是否在您的 WordPress 网站上运行。

准备好? 让我们潜入吧!

什么是 xmlrpc.php?

XML-RPC 是一种能够在 WordPress 和其他系统之间进行通信的规范。 它通过标准化这些通信来做到这一点,使用 HTTP 作为传输机制,使用 XML 作为编码机制。

XML-RPC 早于 WordPress:它存在于 b2 博客软件中,该软件早在 2003 年就创建了 WordPress。系统背后的代码存储在站点根目录中名为xmlrpc.php的文件中。 它仍然存在,即使 XML-RPC 在很大程度上已经过时。

在 WordPress 的早期版本中,XML-RPC 默认是关闭的。 但是从 3.5 版开始,它默认是启用的。 这样做的主要原因是允许 WordPress 移动应用程序与您的 WordPress 安装进行对话。

如果您使用 3.5 版之前的 WordPress 移动应用程序,您可能还记得必须在您的网站上启用 XML-RPC 才能使应用程序能够发布内容。 这是因为该应用程序本身并没有运行 WordPress。 相反,它是一个使用 xmlrpc.php 与您的 WordPress 站点通信的单独应用程序。

但 XML-RPC 不仅用于移动应用程序:它还用于允许 WordPress 和其他博客平台之间的通信,它启用引用和 pingback,它为链接自托管 WordPress 的 Jetpack 插件提供支持网站到 WordPress.com。

但由于 REST API 已集成到 WordPress 核心中,xmlrpc.php 文件不再用于此通信。 相反,REST API 用于与 WordPress 移动应用程序、桌面客户端、其他博客平台、WordPress.com(用于 Jetpack 插件)以及其他系统和服务进行通信。 REST API 可以与之交互的系统范围远远大于 xmlrpc.php 所允许的范围。 此外,还有更多的灵活性。

因为 REST API 已经取代了 XML-RPC,您现在应该在您的站点上禁用 xmlrpc.php。 让我们看看为什么。

为什么你应该禁用 xmlrpc.php

您应该在 WordPress 站点上禁用 xmlrpc.php 的主要原因是因为它引入了安全漏洞并且可能成为攻击的目标。

现在不再需要 XML-RPC 在 WordPress 之外进行通信,因此没有理由保持它处于活动状态。 这就是为什么通过禁用它来使您的网站更安全是明智之举。

如果 xmlrpc.php 是一个安全责任并且它不再起作用,为什么它没有完全从 WordPress 中删除?

这样做的原因是因为 WordPress 的关键特性之一将始终是向后兼容。 如果您管理好您的网站,您就会知道让 WordPress 以及任何插件或主题保持最新是必不可少的。

但是总会有网站所有者不愿意或无法更新他们的 WordPress 版本。 如果他们运行的版本早于 REST API,他们仍然需要访问 xmlrpc.php。

让我们更详细地看一下具体的漏洞。

通过 XML-RPC Pingbacks 的 DDoS 攻击

xmlrpc.php 启用的功能之一是 pingbacks 和 trackbacks。 当其他博客或网站链接到您的内容时,这些通知会出现在您网站的评论中。

XML-RPC 规范使这种通信成为可能,但它已被 REST API 取代(正如我们已经看到的)。

如果在您的站点上启用了 XML-RPC,黑客可能会利用 xmlrpc.php 在短时间内向您的站点发送大量 pingback,从而对您的站点发起 DDoS 攻击。 这可能会使您的服务器超载并使您的网站无法运行。

通过 XML-RPC 的蛮力攻击

每次 xmlrpc.php 发出请求时,它都会发送用户名和密码以进行身份​​验证。 这带来了重大的安全责任,并且是 REST API 不做的事情。 事实上,REST API 使用 OAuth,它发送令牌进行身份验证,而不是用户名或密码。

因为 xmlrpc.php 在每个请求中都会发送身份验证信息,因此黑客可以使用它来尝试访问您的站点。 像这样的蛮力攻击可能允许他们插入内容、删除代码或损坏您的数据库。

如果攻击者向您的站点发送了足够多的请求,每个请求都使用不同的用户名和密码对,那么他们最终有可能找到正确的请求,从而使他们能够访问您的站点。

这就是为什么,如果您正在运行最新版本的 WordPress,它使用 REST API 与外部系统通信,您应该禁用 xmlrpc.php 。 它不是必需的,它可能会使您的网站容易受到攻击。


xmlrpc.php 是否在您的 WordPress 网站上运行?

您需要做的第一件事是确定 xmlrpc.php 是否在您的 WordPress 站点上运行。

这不是检查文件是否存在的简单案例:它是每个 WordPress 安装的一部分,即使 XML-RPC 被禁用,它也会存在。

要检查您的站点上是否启用了 xmlrpc.php,请使用 WordPress XML-RPC 验证服务。 这将检查您的站点并告诉您是否启用了 xmlrpc.php。

WordPress XML-RPC 验证服务
WordPress XML-RPC 验证服务

这是我在服务上检查此站点时得到的结果。

Kinsta XML-RPC 检查
Kinsta XML-RPC 检查

这表明 xmlrpc.php 在 kinsta.com 上已被禁用。 因此,如果您运行检查并发现您的站点上仍然启用了 xmlrpc.php,您如何将其关闭?

如何禁用 xmlrpc.php

有三种方法可以禁用 xmlrpc.php:

让我们分别看看每一个。

如何使用插件禁用 xmlrpc.php

安装一个插件来禁用 xmlrpc.php 是最简单的方法。 Disable XML-RPC 插件将完全禁用它。 这是你如何使用它。

我的起点是我自己的网站,在该网站上启用了 xmlrpc.php。 您可以通过我所做的检查看到这一点:

Rachel McCollin 网站 - XML-RPC 检查
Rachel McCollin 网站 – XML-RPC 检查

通过 WordPress 管理员中的插件屏幕安装插件,然后激活它。

您不必做任何其他事情:激活插件将导致它禁用 XML-RPC。 现在,如果我在我的网站上运行检查,我会得到不同的结果:

Rachel McCollin 网站 - 第二次 XML-RPC 检查
Rachel McCollin 网站 – 第二次 XML-RPC 检查

就是这么简单!

使用插件禁用 XML-RPC Pingback

但是,如果您想禁用 xmlrpc.php 的某些方面而不是其他方面怎么办? Disable XML-RPC Pingback 插件允许您仅禁用 pingback 功能,这意味着您仍然可以在需要时访问 XML-RPC 的其他功能。

该插件的工作方式与禁用 XML-RPC 插件相同:只需安装、激活它,它就会工作。

使用插件配置 XML-RPC 和 REST API 激活

如果您想要更细粒度地控制如何在您的站点上配置 xmlrpc.php 和 REST API,您可以安装 REST XML-RPC 数据检查器插件。

安装并激活此插件后,转到设置 > REST XML-RPC 数据检查器,然后单击XML-RPC选项卡。

REST XML-RPC 数据检查器
REST XML-RPC 数据检查器

这使您可以准确配置 xmlrpc.php 的哪些方面在您的站点上处于活动状态。

需要超快、安全且对开发人员友好的主机? Kinsta 在构建时考虑了 WordPress 开发人员,并提供了大量工具和强大的仪表板。 查看我们的计划

或者,您可以简单地将其完全关闭。 如果您还想控制 REST API,该插件为您提供了另一个选项卡。

如何在没有插件的情况下禁用 xmlrpc.php

如果您不想在您的站点上安装另一个插件,您可以通过在过滤器中添加一些代码来禁用 xmlrpc.php,或者添加到您的 .htaccess 文件中。 让我们看看这两种方法。

通过过滤器禁用 xmlrpc.php

这里的一个选项是使用xmlrpc_enabled过滤器来禁用 xmlrpc.php。 将此功能添加到插件并在您的站点上激活它:

 add_filter( 'xmlrpc_enabled', '__return_false' );

您可以将其添加到您的主题函数文件中,但最好是编写插件。

另一个选项与编辑您的 .htaccess 文件有关,该文件可用于使用 Apache 的托管服务提供商,方法是通过 FTP 或 cPanel 连接到您网站的服务器。

通过 .htacess 文件禁用 xmlrpc.php

在您的.htaccess文件中,添加以下代码:

 <Files xmlrpc.php> Order Allow,Deny Deny from all </Files>

确保在这样做之前制作旧文件的副本,以防万一遇到任何问题。

让您的托管服务提供商禁用 xmlrpc.php

或者,如果检测到攻击,一些托管服务提供商将禁用 xmlrpc.php。

在 Kinsta,当检测到通过 XML-RPC 进行的攻击时,会自动将一段代码添加到 Nginx.config 文件中:

 location ~* ^/xmlrpc.php$ { return 403; }

这将产生 403 错误并阻止攻击。

如果您自己这样做,最好使用上述方法之一。 但在此之前,请务必先咨询您的托管服务提供商。

什么时候需要启用 xmlrpc.php?

在某些情况下,您确实需要在 WordPress 站点上启用 xmlrpc.php,或者您不应该完全禁用它。

这些都是:

  • 您没有运行 REST API(不建议,但在某些情况下是必要的),但需要在您的 WordPress 站点和其他系统之间进行通信。
  • 您无法将 WordPress 更新到 4.4 或更高版本,因此无权访问 REST API。 这可能是因为您的托管设置受到限制(在这种情况下我会更改托管服务提供商)或主题或插件不兼容(在这种情况下我会替换或更新它们)。
  • 您正在使用无法访问 WP REST API 但可以访问 XML-RPC 的外部应用程序(从长远来看,我建议更新该应用程序或切换到与 REST 兼容的应用程序)。

就是这样! 这些都不是保持 XML-RPC 规范开启的特别好的理由。

它仍在 WordPress 中的唯一原因是为了向后兼容,并且只有在使用过时的系统时才使用它。 对于任何想要使他们的网站保持最新并使用最新技术的人来说,禁用 xmlrpc.php 是可行的方法。

XML-RPC 曾经是 WordPress 的重要组成部分。 现在它代表了安全风险 - 本指南将向您展示如何在您的站点上禁用它。 点击推文

概括

XML-RPC 规范是在 WordPress 创建之前开发的,作为 WordPress 与外部系统和应用程序通信的一种方式。 它具有固有的安全漏洞,可能使您的网站容易受到攻击。

现在 REST API 允许您的站点与其他应用程序通信,您可以安全地禁用 xmlrpc.php。 如果您按照上述步骤进行操作,禁用它可以提高您网站的安全性。