网站WordPress因为 xmlrpc.php 文件被过多扫描,就会造成服务器负载过重,访问页面变得非常缓慢,查了好久才知道是这个文件被扫描过多造成的。
本文深入剖析 XML-RPC 在 WordPress 中的作用、存在的安全风险,并提供多种有效的防御对策,全方位加固 WordPress 网站安全。

一、深入解析 XML-RPC
XML-RPC 的作用

(XML Remote Procedure Call)是一种使用 XML 进行编码、基于 HTTP 协议的远程过程调用规范。在 WordPress 中,XML-RPC 允许外部系统通过编程方式与 WordPress 进行交互,实现诸如发布文章、获取评论、上传媒体等功能。
这一功能大幅增强了 WordPress 的灵活性和互操作性,在多设备协同工作、第三方系统集成等场景中备受推崇。例如,通过手机 APP 管理WordPress 网站,或者从其他平台自动同步内容到WordPress 博客等。
二、XML-RPC 的安全隐患
尽管 XML-RPC 为 WordPress 带来了便利,但它也暴露出一些严重的安全隐患:
暴力破解攻击:由于 XML-RPC 的系统.multicall 方法允许发送批量请求,攻击者可以在单次请求中尝试成千上万的密码组合,从而绕过传统的登录尝试限制措施,极大增加了暴力破解的效率。DDoS 攻击:恶意攻击者可以利用 XML-RPC 接口的 pingback 功能,实施分布式拒绝服务(DDoS)攻击,使网站服务器超载瘫痪。这种攻击手段隐蔽且危害巨大。真实 IP 泄露:如果使用 CDN 服务商提供的 DNS 保护服务,攻击者可以通过 pingback 方法获取网站的真实 IP 地址,为进一步的攻击做准备,造成更大的危害。敏感数据泄露:由于 XML-RPC 提供了访问 WordPress 核心功能的接口,一旦被攻击者利用,可能导致网站内容、用户信息等敏感数据被盗取或篡改。
简单说,XML-RPC 这一看似无害的功能,实则为黑客提供了可乘之机,成为 WordPress 网站遭受攻击的一个重大隐患。因此,如何有效防御 XML-RPC 相关的安全风险,对于每一位 WordPress 网站管理员来说都是当务之急。
三、全方位防御 XML-RPC 安全风险
面对 XML-RPC 带来的种种安全隐患,我们需要从多个角度入手,采取全方位的防御对策,切实保护网站的安全。
方案一:使用安全扫描插件
WordPress 插件库中有多款可靠的安全扫描插件,能够主动检测 XML-RPC 面临的威胁,并提供一键禁用 XML-RPC 的功能,例如"Disable XML-RPC"、"XML-RPC Exploit preventer";等。安装这些插件后,它们会自动调整 WordPress 设置,关闭 XML-RPC 接口,从根源上杜绝各类威胁。
方案二:修改主题代码禁用 XML-RPC
对于有一定编程基础的用户,也可以通过修改主题代码的方式禁用 XML-RPC。只需在主题的 functions.php 文件中添加以下一行代码:
```
add_filter('xmlrpc_enabled', '__return_false');
方案三:通过服务器配置文件禁止访问
如果有修改服务器配置文件的权限,也可以直接在配置文件中添加规则,拦截对 xmlrpc.php 文件的访问请求。
对于 Apache 服务器,可以在网站根目录下的 .htaccess 文件中添加以下规则:
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
对于使用 Nginx 服务器的用户,可以在服务器配置文件中添加以下规则:
location ~* ^/xmlrpc.php$ {
return 403;
}

方案四:在 wp-config.php 中禁止访问
最后,还可以直接在 WordPress 的配置文件 wp-config.php 中添加代码,拒绝访问 xmlrpc.php 文件。在文件最开始处添加以下代码即可:
if(strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false){
$protocol = $_SERVER['SERVER_PROTOCOL'] ?? '';
if(!in_array($protocol, ['HTTP/1', 'HTTP/2', 'HTTP/0', 'HTTP/3'], true)){
$protocol = 'HTTP/0';
}
header("$protocol 403 Forbidden", true, 403);
die;
}
该代码的作用是,一旦发现请求的 URL 中包含 xmlrpc.php,立即返回 403 Forbidden 错误,拒绝访问。
方案五:使用网站防火墙(WAF)
除了在 WordPress 端采取措施外,还可以考虑在服务器层面部署网站防火墙(WAF)。高质量的 WAF 产品能够主动识别并拦截各种恶意攻击行为,有效防御 XML-RPC 相关的攻击威胁。常见的 WAF 解决方案包括云服务商提供的 WAF、开源的 ModSecurity 以及第三方安全厂商的 WAF 产品等。
四、哪种方案最适合你?
五种方案各有适用场景,以下是决策指南:
- 追求最简单:Nginx 层拦截(方案三)——一行 location 规则,不依赖 WordPress,性能最优。在服务器层面直接返回 403,请求甚至不会到达 PHP,这是最高效的防御方式
- 需要保留部分 XML-RPC 功能:如果你用的是 Jetpack 或 WordPress 手机 APP,不能直接禁掉。建议在 Nginx 层做速率限制(参考 Nginx limit_req 限流),配合安全插件对 XML-RPC 请求做 IP 白名单
- 已经用了 Cloudflare:在 Cloudflare 的 WAF 规则中添加一条:URI 包含
xmlrpc.php→ Block,比服务器层更省资源
以本站 sodebug.com 为例,上线 Nginx 403 规则前每天有 5000+ 次 xmlrpc.php 扫描请求(几乎全是 POST 爆破尝试),上线后这些请求在 Nginx 层就被挡掉,PHP 进程不再被消耗,服务器 CPU 负载下降了约 15%。
五、加固网站整体安全
防范 XML-RPC 攻击只是网站安全防护的一个方面,我们还需要从整体上加固 WordPress 网站的安全性:
- 及时更新 WordPress 版本和插件,修复已知漏洞
- 使用复杂安全的密码,并定期更换
- 启用双重身份验证功能,增加登录安全层
- 限制登录错误尝试次数,防止暴力破解
- 安装可靠的网站防火墙和安全扫描插件
- 备份网站数据,以应对最坏情况发生
只有从全方位入手,并坚持长期防护,才能最大限度确保 WordPress 网站的安全。
六、结语
对于像 XML-RPC 这样看似无害但潜藏巨大风险的功能,必须重视并采取积极有效的防御措施。通过关闭 XML-RPC、加固网站整体安全性等多管齐下,我们就能够最大程度避免网站遭受攻击,保护好宝贵的网站数据和用户信息。
相关阅读:Nginx limit_req 限流、WordPress 多站点