xmlrpc.php 文件可以在 WordPress 核心中找到,并且通常默认启用,这会使您的 WordPress 站点暴露在各种恶意攻击之下。
我们推出了加速域名!
Accelerated Domains 是一项服务,可在以下四个方面极大地改进和优化您的网站:性能、可扩展性、安全性、碳足迹。
我们将了解 XMLRPC 文件是什么,它有什么作用,更重要的是,如何在提高网站安全性的同时管理它。
什么是 XMLRPC?
XML-RPC(可扩展标记语言——远程过程调用)的创建是为了提供跨平台通信。这是一种协议,它使用 HTTP 作为传输方式,使用 XML 作为编码器来生成过程调用,从而允许在远程计算机上运行函数。
客户端(即浏览器或移动应用程序)可以向服务器发送 HTTP 请求,然后服务器发送 HTTP 响应。HTTP 请求可用于调用函数,然后这些函数可用于执行特定操作。
这与 REST API 不同,因为它使用 URL 参数来标识资源。相反,RPC 使用查询参数来提供函数参数。
XMLRPC 允许用户与他们的站点远程交互,例如通过 WordPress 移动应用程序或通过 JetPack 或 WooCommerce 等插件。
与 xmlrpc.php 文件相关的安全问题
XMLRPC 会使您的站点暴露在各种攻击之下。由于很容易追踪,黑客可以发送任意 XML 数据,然后允许他们以多种方式控制站点。以下是您应该了解的一些安全问题。
蛮力攻击
在暴力攻击中,黑客实质上是通过尝试数千种组合,尝试使用纯粹的暴力猜测正确的密码和用户名。
如果您的管理员密码较弱且未使用多重身份验证,则黑客有可能强行进入您网站的后端。
WPSCAN 是 Kali Linux 的一个流行工具,可用于轻松查找和列出网站的所有有效用户名。完成后,黑客可以通过发送以下请求通过 xmlrpc.php 文件使用暴力破解:
POST /xmlrpc.php HTTP/1.1User-Agent: FiddlerHost: www.example.comContent-Length: 164<methodCall><methodName>wp.getUsersBlogs</methodName><params><param><value>admin</value></param><param><value>pass</value></param></params></methodCall>
这样,黑客就可以发送数千种组合,直到网站发送正确的密码。指示错误输入的响应,同时也告诉黑客重试,如下所示:
HTTP/1.1 200 OKServer: nginxDate: Sun, 26 May 2019 13:30:17 GMTContent-Type: text/xml; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/7.1.21Cache-Control: private, must-revalidateExpires: Sun, 02 Jun 2019 13:30:17 GMTContent-Length: 403<?xml version="1.0" encoding="UTF-8"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>403</int></value></member><member><name>faultString</name><value><string>Incorrect username or password.</string></value></member></struct></value></fault></methodResponse>
它返回 HTTP 200 代码,表示用户名和密码不正确。如果安全性较低,黑客甚至不必担心 reCaptchas 或有限的登录尝试。
DDoS 攻击
分布式拒绝服务或 DDoS 攻击可以通过同时发送数千个请求使服务器完全离线。WordPress 中的 pingback 功能通常被黑客与 xmlrpc.php 文件结合使用以运行 DDoS 攻击。
通常,黑客会找到一个他们可以多次攻击的页面,然后开始攻击它。为开始攻击,黑客首先检查 xmlrpc.php 文件。他们通过发送这个请求来做到这一点:
POST /xmlrpc.php HTTP/1.1
Host: servebolt.comConnection: keep-aliveContent-Length: 175<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>demo.sayHello</methodName><params><param><value>admin</value></param></params></methodCall>
一旦黑客确认 xmlrpc.php 文件已启用,他们便开始使用被利用网站网络对其进行攻击,以发送不同的 pingback 请求。
在许多情况下,这可以使用以下代码自动执行:
POST /xmlrpc.php HTTP/1.1Host: withinsecurity.comConnection: keep-aliveContent-Length: 293<methodCall><methodName>pingback.ping</methodName><params><param><value><string>http://173.244.58.36/</string></value></param><param><value><string>https://example.com/blog/how-to-make-a-salad</string></value></param></params></methodCall>
跨站端口攻击
跨站点端口攻击 (XSPA) 非常普遍。黑客通常通过注入恶意代码来接收有关 IP 地址和 TCP 端口的信息来发起这些攻击。
黑客使用 pingback.ping 技术 pingback 网站上的帖子,返回 IP 地址。然后,他们使用嗅探器建立端点以发送实时博客文章 URL 和 pingback,使用以下请求:
<methodCall><methodName>pingback.ping</methodName><params><param><value><string>http://<YOUR SERVER >:<port></string></value></param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string></value></param></params></methodCall>
如何阻止 XMLRPC 攻击
您可以使用多种方法来阻止 XMLRPC 攻击——您会遇到的大多数方法都是无效的——以下是我们建议的解决方法:
加速域和 Servebolt CDN 如何处理 XMLRPC 问题
Servebolt 有两个产品可以开箱即用地执行 XMLRPC 安全性。他们都采取这样的方法,即到这个地方的一些流量可能是有效的,但太多或太频繁是黑客企图的迹象。
例如,我们的加速域实现监听对xmlrpc.php的请求,如果一分钟内有超过 15 个请求,它将禁止该 IP 地址一整天。这有效地阻止了黑客企图,同时允许通过 WordPress Mobile 的网站用户或 Jetpack/WooCommerce 的用户继续工作。
Servebolt CDN 的处理方式略有不同,它还有一个阈值,即从同一 IP 地址到xmlrpc.php的每分钟 15 个请求,然后禁止该 IP 地址 1 小时。
如果您已经做出(明智的😄)决定与我们一起托管您的 WordPress 网站 – 当使用 Servebolt 的 CDN 或加速域时 – 这些安全选项之一会自动为您实施。
在 Cloudflare 上阻止 XMLRPC
可以直接在 Cloudflare 上阻止到xmlrpc.php的流量,阻止它到达您的服务器。
如果您还阻止不是来自 Cloudflare 的流量,这只是一个真正有效的解决方案。如果您还没有设置它,那么黑客仍然有可能尝试在您的源服务器上直接访问和利用它。当然,只需通过 Servebolt 管理界面单击一下即可轻松配置。
这会有所帮助,就像使用 Servebolt 的加速域或 CDN 一样,来自不良行为者的xmlrpc.php流量在到达服务器之前很久就会在边缘停止。
要阻止所有流量,请登录 Cloudflare 管理员,选择域,单击安全,单击 WAF,创建新的防火墙规则,然后输入详细信息,如下图所示:
- 规则名称 = 随便你怎么称呼它
- 字段 = URI 路径
- 运算符 = 等于
- 值 = /xmlrpc.php
或者您可以“编辑表达式”并粘贴以下代码:
(http.request.uri.path eq "/xmlrpc.php")
选择“阻止”操作并保存并部署它。
记住:因为你已经设置了它,所以你必须记住它存在。将来您可能会想知道为什么xmlrpc.php不工作并且您在服务器配置中看不到它。
注意:如果您使用此方法,则必须确保您的服务器配置为仅允许来自 Cloudflare 的流量。否则,可以绕过它。
在 Servebolt 中,这可以在控制面板中启用:
替代方法:完全禁用服务器上的 XMLRPC
在 Apache 服务器上
更好的替代方法是完全禁用 XMLRPC 文件。这在 Apache 上是可能的,只需在 .htaccess 文件中添加一段代码,就在 WordPress 添加的公司规则之前:
<Files xmlrpc.php>order allow,denydeny from all</Files>
您还可以将希望访问 XMLRPC 的 IP 地址列入白名单。为此,请使用此命令:
<Files xmlrpc.php><RequireAny>Require ip 1.1.1.2Require ip 2001:db8::/32</RequireAny></Files>
这是一个明智的选择,因为它消除了 XMLRPC 的误用,但也有一个缺点:您将禁用对站点的远程访问。因此,移动应用程序(或 Jetpack,就此而言)将无法正常运行。
在 Nginx 服务器上
在 Nginx 上禁用稍微困难一些,因为您需要具有服务器配置访问权限,而不是更简单的 Apache .htaccess。要禁用,编辑通常位于 /etc/nginx/sites-available 中的虚拟主机配置文件,并将以下指令添加到服务器块:
server { # // your standard server root and configuration location = /xmlrpc.php {
deny all;
} # // rest of the server configuration such as PHP-FPM
}
Servebolt 使用 .htaccess 方法将此解决方案部署到 xmlrpc.php。如果你使用像 Servebolt 这样的托管主机并且正在使用 Nginx,你很可能需要他们为你实现这个。
为什么安装安全插件不是一个明智的主意
大多数人可能会考虑在他们的网站上安装 WordPress 安全插件。然而,这实际上不是一个好主意,原因如下:
- 对xmlrpc.php的请求仍然会发生,安全插件位于它和 WordPress 之间,耗尽系统资源,在发生攻击时会更快地失败。
- 它们主要在应用程序级别而非服务器级别有效。
- 他们向您的站点添加不必要的代码,影响其性能。
- 他们需要持续的负载管理。
- 安全插件扰乱了 WordPress 安全的关键部分,包括登录 – 作为登录的一部分运行的代码中只要有一个错误,您的网站就会面临更大的风险。