WordPress禁用XML-RPC教程:关闭暴力破解放大器接口

什么是XML-RPC?为什么要禁用它?

XML-RPC(xmlrpc.php)是WordPress内置的一个远程过程调用接口,最初设计用于:
– WordPress手机App远程发布文章
– Jetpack插件连接WordPress.com服务
– 第三方博客客户端(Windows Live Writer等)发布内容
– 实现Pingback/Trackback功能

问题在于:XML-RPC接口默认对所有人开放,且有一个非常危险的特性——单个请求可以包含多个身份验证尝试system.multicall方法)。这使黑客可以在一次HTTP请求中尝试数百个密码,绕过了正常的登录失败次数限制。

这就是所谓的”暴力破解放大器”:
– 正常登录:每次请求测试1个密码
– 通过xmlrpc.php的multicall:每次请求可测试100-500个密码
– 效率提升100-500倍,且绕过基于请求次数的防护


你是否需要XML-RPC?

在禁用之前,先确认你是否用到了以下功能:

功能 是否需要XML-RPC
使用WordPress官方手机App ✓ 需要
使用Jetpack插件 ✓ 需要
使用Windows Live Writer等桌面客户端 ✓ 需要
Pingback(通知其他博客被引用) ✓ 需要
仅通过浏览器管理WordPress ✗ 不需要
外贸网站(不需要上述功能) ✗ 不需要

结论:大多数外贸独立站和企业网站不需要XML-RPC,可以完全禁用。


方法一:通过.htaccess禁用(推荐/Apache服务器)

在WordPress根目录的 .htaccess 文件中添加以下代码:

# 禁用XML-RPC
<Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
</Files>

效果: 所有访问 xmlrpc.php 的请求返回403 Forbidden,完全阻断该接口。

优点: 在Web服务器层面拦截,不消耗PHP资源,效率最高。

Nginx服务器等效配置:

# 在server块中添加
location = /xmlrpc.php {
    deny all;
    return 403;
}

方法二:通过插件禁用

如果不熟悉文件编辑,使用插件更安全:

推荐插件:Disable XML-RPC
– 安装:插件 → 安装新插件 → 搜索”Disable XML-RPC” → 安装并激活
– 激活后立即生效,无需任何配置
– 轻量级,专注单一功能

或使用Wordfence(如已安装):
Wordfence → 防火墙 → 阻止所有XML-RPC访问(在高级防火墙选项中)


方法三:通过wp-config.php禁用Pingback

如果需要保留XML-RPC的部分功能(如Jetpack),但想禁用Pingback这个最危险的功能,在 wp-config.php 中添加:

// 禁用Pingback而不完全禁用XML-RPC
add_filter('xmlrpc_enabled', '__return_false');

或在主题的 functions.php 中:

// 禁用WordPress Pingback
add_filter('xmlrpc_enabled', '__return_false');
remove_action('publish_post', 'pingback_hub_ping');
add_filter('xmlrpc_methods', function($methods) {
    unset($methods['pingback.ping']);
    return $methods;
});

方法四:通过Cloudflare WAF规则禁用

如果已接入Cloudflare,可以在Cloudflare层面拦截:

规则名:Block xmlrpc.php
条件:http.request.uri.path eq "/xmlrpc.php"
操作:Block(阻止)

优点是连PHP都不会被触发,效率最高。


禁用后的验证

测试是否成功禁用:

方法1:直接访问
在浏览器访问 https://你的域名.com/xmlrpc.php,如果显示 403 Forbidden404 Not Found,即禁用成功。

方法2:用curl测试

curl -s "https://你的域名.com/xmlrpc.php" -o /dev/null -w "%{http_code}"
# 期望返回:403 或 404

方法3:Wordfence工具
Wordfence → 诊断工具,查看是否有XML-RPC相关警告。


Pingback攻击:另一个XML-RPC危险

除了暴力破解,XML-RPC还可以被用于Pingback DDoS攻击

攻击者找到大量WordPress网站(都开着Pingback),发送请求让这些网站的xmlrpc.php向目标网站发送Pingback请求。结果是目标网站收到大量来自合法WordPress网站的请求,难以过滤。

同时,你的网站也可能被利用为攻击中继:

禁用XML-RPC后,你的网站不仅自身更安全,也不会成为攻击者的帮凶。


如果必须保留XML-RPC(使用Jetpack的情况)

如果你使用Jetpack且无法禁用XML-RPC,可以只允许Jetpack服务器的IP访问:

# 在.htaccess中:只允许Jetpack服务器访问xmlrpc.php
<Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
    # Jetpack服务器IP(需定期更新)
    Allow from 76.74.255.0/25
    Allow from 216.151.209.64/26
    Allow from 66.155.9.238
    Allow from 66.155.9.239
</Files>

注意:Jetpack的IP段可能变化,需要根据Jetpack官方文档更新。


禁用XML-RPC是最简单的安全加固之一

与其他安全加固措施相比,禁用XML-RPC操作简单,风险低,效果立竿见影:
– 完全消除了通过xmlrpc.php的暴力破解攻击面
– 阻止了Pingback DDoS攻击
– 让服务器不再浪费资源处理来自xmlrpc.php的恶意请求

结合双因素认证Cloudflare WAF,可以大幅提升WordPress登录安全。