为确保WordPress安全尽早禁用xmlrpc.php

xmlrpc-php-1024x512-1

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

自WordPress诞生以来,该规范一直是WordPress的一部分,并且非常有用。没有它,WordPress将会置身于孤岛,与互联网其他组成部分分道扬镳。

但是,xmlrpc.php有其缺点。通过它,可以向您的WordPress网站注入漏洞,现已被WordPress REST API取代,通过API将WordPress开放给其他应用程序方面做得更好。

在本文中,我们将解释什么是xmlrpc.php,为什么要禁用它,及如何确定它是否正在WordPress网站上运行。

  1. 什么是xmlrpc.php?
  2. 为什么要禁用xmlrpc.php
  3. xmlrpc.php是否在WordPress网站上运行?
  4. 如何禁用xmlrpc.php
  5. 何时需要启用xmlrpc.php?

什么是xmlrpc.php?

XML-RPC是支持WordPress与其他系统之间通信的规范。它通过使用HTTP作为传输机制和XML作为编码机制来标准化这些通信来实现此目的。

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

在WordPress的早期版本中,默认情况下已关闭XML-RPC。但是自v3.5版本开始,默认情况下又启用它。这样做的主要原因是允许WordPress移动应用程序与WordPress安装进行对话通讯。

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

但是XML-RPC不仅用于移动应用程序:它还用于允许WordPress和其他博客平台之间进行通信,还支持引用和pingback,并为Jetpack插件提供支持,该插件可链接自托管的WordPress网站至著名的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的主要原因是因为可以通过它注入安全漏洞,  并且xmlrpc.php可能成为攻击的目标。

既然不再需要XML-RPC在WordPress之外进行通信,就没有理由保持它的激活状态。这就是为什么通过禁用它来提高站点安全性。

如果xmlrpc.php会对WordPress网站造成安全隐患,那么为什么不将其完全从WordPress中删除呢?

这是因为WordPress的主要功能之一始终是向后兼容。对网站进行良好的管理,就应该知道保持WordPress以及任何插件或主题版本为最新是必不可少的。

但是总会有那么一群站长不愿或无法更新其WordPress版本至最新版本。如果安装的WordPress版本早于REST API,则这些站点仍然需要访问xmlrpc.php。

通过XML-RPC Pingbacks进行DDoS攻击

xmlrpc.php启用的功能之一是pingback和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网站上运行。

并非简单地检查该文件是否存在:xmlrpc.php是每个WordPress安装的一部分,即使禁用了XML-RPC,它仍然存在。

删除任何内容之前,请务必备份您的网站(注:对网站系统任何核心文件进行修改删除及处理数据库等操作,建议尽可能先备份原文件或者数据库,再执行操作,以免造成不必要的麻烦)。在这种情况下,不要仅仅删除xmlrpc.php文件,因为它会破坏您的站点。

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

WordPress XML-RPC验证服务

WordPress XML-RPC验证服务

输入一个我们的测试网站,检测网站的结果如下:

网站XML-RPC检测-已禁用状态

网站XML-RPC检测-已禁用状态

这表明xmlrpc.php在该测试网站上已被禁用。如果您运行检查并发现xmlrpc.php仍在站点上启用,如何关闭它?

如何禁用xmlrpc.php

禁用xmlrpc.php有两种方法:

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

如何使用插件禁用xmlrpc.php

(1)使用插件禁用XML-RPC

安装插件以禁用xmlrpc.php是最简单的方法。你可以通过安装Disable XML-RPC插件来实现。使用方法如下:

对一个启用了xmlrpc.php的网站进行XML-RPC检测,你会看到下面的结果:

网站第一次XML-RPC检测-未禁用状态

网站第一次XML-RPC检测-未禁用状态

通过WordPress仪表盘的“ 插件”界面安装插件,然后将其启用。

您无需执行其他任何操作:启用插件即可禁用XML-RPC。再次对该测试网站进行检查,则会得到不同的结果:

网站第二次XML-RPC检测-已禁用状态

网站第二次XML-RPC检测-已禁用状态

(2)使用插件禁用XML-RPC Pingbacks

但是,如果要禁用xmlrpc.php的某部分功能,比如Pingback,该怎么办?使用Disable XML-RPC Pingback插件,您可以仅禁用pingback功能,这意味着如果需要,您仍然可以访问XML-RPC的其他功能。

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

如果要对站点上的xmlrpc.php和REST API的配置方式进行更细致的控制,可以安装REST XML-RPC Data Checker插件。
安装并启用此插件后,转到 设置>REST XML-RPC Data Checker ,然后单击“ XML-RPC”选项卡。

REST XML-RPC数据检查器

REST XML-RPC数据检查器

可以准确配置xmlrpc.php的哪些功能在站点上处于活动状态。

或者,您可以将其完全关闭。而且,如果您还想控制REST API,则插件会为您提供另一个选项卡。

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

如果您不想在您的站点上安装这类插件,则可以通过WordPress过滤器,或.htaccess文件、Nginx配置文件添加一些代码来禁用xmlrpc.php 。

(1)通过过滤器禁用xmlrpc.php

使用xmlrpc_enabled过滤器禁用xmlrpc.php,将此功能添加到其中一个插件并启用即可:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
add_filter( 'xmlrpc_enabled', '__return_false' );
add_filter( 'xmlrpc_enabled', '__return_false' );
add_filter( 'xmlrpc_enabled', '__return_false' );

当然也可以将其添加到主题functions文件中,但是编写插件是一种更好的做法。

(2)通过.htacess文件或者Nginx配置文件禁用xmlrpc.php

另一种选择与编辑.htaccess文件或者Nginx配置文件来禁用XML-RPC功能。

如果你的服务器使用的是Apache,则网站根目录找到.htaccess文件中,添加以下代码:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
<Files xmlrpc.php> Order Allow,Deny Deny from all </Files>
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>

如果你的服务器使用的是Nginx,将以下代码添加到Nginx.config文件中:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
location ~* ^/xmlrpc.php$ {
return 403;
}
location ~* ^/xmlrpc.php$ { return 403; }
location ~* ^/xmlrpc.php$ {
return 403;
}

您何时需要启用xmlrpc.php?

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

  • 没有运行REST API(不建议使用,但在某些情况下是必需的),但需要在WordPress网站和其他系统之间进行通信。
  • 无法将WordPress更新至版本4.4或更高版本,因此无权访问REST API。这可能是由于主题或插件不兼容,如果可能,建议尽快使用代替主题或者插件。
  • 正在使用无法访问WP REST API但可以访问XML-RPC的外部应用程序(从长远来看,建议更新该应用程序或切换到兼容REST API的应用程序)。

以上这些都不是坚持继续启用XML-RPC理由,是一种“不思进取”的行为。

它仍然存在于WordPress中的唯一原因是为了向后兼容,只有在使用过时的系统时才使用它。对于任何想要使其站点保持最新状态并使用最新技术的人,禁用xmlrpc.php才是正路。

小结

XML-RPC规范是在WordPress创建之前就开发了,它是WordPress与外部系统和应用程序进行通信的一种手段。XML-RPC曾经是WordPress的重要组成部分,但现在它可以成为WordPress网站的安全风险,如非必要,我们应该禁用它。

既然REST API允许您的站点与其他应用程序通信,则可以安全地禁用xmlrpc.php。按照上述步骤操作,则可以通过禁用它来提高网站的安全性。

评论留言

唇枪舌剑 (1)

  • Bonnie的头像

    Bonnie

    2020.7.31 22:07

    如果网站安装了wordfence,是不是就不用装禁用xmlrpc.php的插件了呢

    回复