如何修复 WordPress XML-RPC 接口带来的安全漏洞?

文章导读
对于大多数不需要远程发布或使用 Jetpack 等特定插件的 WordPress 站点,最稳妥的处理方式是直接禁用 XML-RPC 接口,以阻断潜在的暴力破解和 DDoS 攻击路径。
📋 目录
  1. A 风险原理
  2. B 操作前准备
  3. C 具体实施方法
  4. D 验证生效
  5. E 常见坑
A A

对于大多数不需要远程发布或使用 Jetpack 等特定插件的 WordPress 站点,最稳妥的处理方式是直接禁用 XML-RPC 接口,以阻断潜在的暴力破解和 DDoS 攻击路径。

先说结论:除非明确依赖该接口,否则建议彻底关闭,优先通过代码或服务器配置实现。

  • 先判断:确认站点是否使用 Jetpack、手机 App 或其他依赖 XML-RPC 的第三方服务。
  • 优先做:通过主题 functions.php 添加过滤代码,或在服务器层(Nginx/Apache)禁止访问 xmlrpc.php。
  • 再验证:使用 curl 命令或在线工具测试接口是否返回 403 禁止访问或功能失效。

风险原理

XML-RPC 是 WordPress 早期用于远程过程调用的协议,允许客户端通过 HTTP 请求执行服务器上的方法。从 WordPress 3.5 版本开始,该功能默认开启。虽然它方便了一些远程管理操作,但也带来了显著的安全风险。

主要隐患包括:

  • 暴力破解:攻击者可以通过 xmlrpc.php 绕过后台登录次数限制,单次请求即可尝试多个密码。
  • DDoS 攻击:利用 Pingback 功能,攻击者可以伪造请求让大量网站同时访问目标站点,消耗服务器资源。
  • SSRF 漏洞:在旧版本(如 3.5.1 之前)中,可能存在服务器端请求伪造风险,导致内网探测。

操作前准备

在进行任何配置修改前,请务必备份网站文件和数据库,以防配置错误导致网站不可用。

  1. 备份当前主题目录下的 functions.php 文件。
  2. 备份服务器配置文件(Nginx.conf 或 .htaccess)。
  3. 确认当前 WordPress 版本及是否依赖 Jetpack 插件。

具体实施方法

选择以下一种方法即可,不建议同时使用多种以免冲突。

方法一:通过 functions.php 禁用(推荐)

进入当前主题目录,编辑 functions.php 文件,在末尾添加以下代码。此方法兼容性最好,修改保存即生效。

add_filter('xmlrpc_enabled', '__return_false');

方法二:Nginx 配置禁止访问

修改 Nginx 配置文件,在 server 块中添加以下规则,然后重载配置。

如何修复 WordPress XML-RPC 接口带来的安全漏洞?
location ~* /xmlrpc.php { deny all; }

重载命令:nginx -s reload

方法三:Apache .htaccess 禁止访问

在网站根目录下的 .htaccess 文件中添加以下规则。注意 Apache 2.4+ 版本需使用新语法。

<Files xmlrpc.php>
    Require all denied
</Files>

验证生效

完成配置后,可以通过以下方法验证接口是否已关闭。

方法 1:命令行测试

在终端执行 curl 请求,观察返回状态码。注意根据站点实际协议调整 http/https。

curl -i https://你的域名/xmlrpc.php

如果配置成功,应返回 403 Forbidden(服务器拦截)或 405 Method Not Allowed,而不是 200 OK。

方法 2:在线工具

使用公开的 XML-RPC 漏洞扫描工具或 Pingback 测试工具,确认无法通过接口调用方法。

常见坑

  • 不要直接删除文件:不建议直接删除 xmlrpc.php 文件,因为 WordPress 升级后会自动恢复该文件,导致防护失效。
  • 插件冲突:部分安全插件也提供关闭 XML-RPC 的功能,如果同时使用代码禁用,可能产生冗余,但通常不会冲突。
  • Jetpack 用户:如果必须使用 Jetpack,不能完全禁用,建议通过安全插件限制访问 IP 或启用双因素认证来降低风险。
  • Apache 版本差异:Apache 2.4 及以上版本已废弃 Order 指令,需使用 Require 指令,否则配置无效。