什么是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 Forbidden 或 404 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登录安全。