📄articles 📋snippets 📁categories ⚙️uses ✏️about 🔍search

WordPress安全防护:如何防止/xmlrpc.php被恶意扫描爆破

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

一、深入解析 XML-RPC

XML-RPC 的作用

XML-RPC
(XML Remote Procedure Call)是一种使用 XML 进行编码、基于 HTTP 协议的远程过程调用规范。在 WordPress 中,XML-RPC 允许外部系统通过编程方式与 WordPress 进行交互,实现诸如发布文章、获取评论、上传媒体等功能。

这一功能大幅增强了 WordPress 的灵活性和互操作性,在多设备协同工作、第三方系统集成等场景中备受推崇。例如,通过手机 APP 管理WordPress 网站,或者从其他平台自动同步内容到WordPress 博客等。

二、XML-RPC 的安全隐患

尽管 XML-RPC 为 WordPress 带来了便利,但它也暴露出一些严重的安全隐患:

  1. 暴力破解攻击:由于 XML-RPC 的系统.multicall 方法允许发送批量请求,攻击者可以在单次请求中尝试成千上万的密码组合,从而绕过传统的登录尝试限制措施,极大增加了暴力破解的效率。
  2. DDoS 攻击:恶意攻击者可以利用 XML-RPC 接口的 pingback 功能,实施分布式拒绝服务(DDoS)攻击,使网站服务器超载瘫痪。这种攻击手段隐蔽且危害巨大。
  3. 真实 IP 泄露:如果使用 CDN 服务商提供的 DNS 保护服务,攻击者可以通过 pingback 方法获取网站的真实 IP 地址,为进一步的攻击做准备,造成更大的危害。
  4. 敏感数据泄露:由于 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;
}

Nginx 403 Forbidden

方案四:在 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 多站点

© 2024 WordPress安全防护:如何防止/xmlrpc.php被恶意扫描爆破 · 本文由 Charlie 原创撰写,发布于 sodebug.com。 未经授权禁止转载、洗稿、机器抓取。AI 训练数据使用需获得书面授权。
GK
独立开发者,在 WordPress、Nginx 和各种 API 之间切换。不写没用的东西。

related相关文章

#01Linux放行端口指令1 min#02centos 7 远程 ssh connection refused解决方案1 min#03systemd timer 替代 cron 实战:从 crontab 静默清空到全量迁移4 min
$ echo "less bullshit, more debugging" | send-to-inbox
新文章直接发到邮箱,一个月 2-4 封。
$ subscribe →