WordPress站点删除xmlrpc.php防DDOS攻击

在WordPress根目录下xmlrpc.php干什么的?简单地说就是Wordpress 为手机等客户端提供的接口文件,早期的Wordpress 这个接口就是个万恶之源,现在也不太安全,恶意程序会不断尝试扫描这个文件,造成主机资源耗尽而瘫痪,很多WP用户用都遇到过主机商的类似警告“占用资源高”的提示,与这个接口有很大的关系。

如果不链接小程序、不离线发表文章,删除WordPress根目录的xmlrpc.php文件,也可以清空里面的内容,保留一个空文件,不会影响正常的WordPress运行。删除xmlrpc.php是防御针对该文件的 DDOS 攻击的有效方法,因为 WordPress 的xmlrpc.php经常成为攻击目标(尤其是通过批量 pingback 功能发起的 DDOS)。以下是具体的操作方法和替代方案:

方法一:直接删除或重命名文件(最简单)

通过 FTP / 文件管理器操作

登录服务器(或通过 WordPress 后台的文件管理插件),找到网站根目录下的xmlrpc.php文件,直接删除或重命名(例如改为xmlrpc.php.bak)。

    • 优点:立即生效,彻底攻击无法再该文件发起请求。
    • 注意:WordPress 更新时可能会自动恢复该文件,需要定期检查或配合其他方法加固。

方法二:通过代码禁用 xmlrpc 功能(更可靠)

如果担心想完全保留文件但禁用其功能,可在主题的functions.php或自定义插件中添加代码:

// 完全禁用XML-RPC功能
add_filter('xmlrpc_enabled', '__return_false');

// 禁用pingback相关功能(防止间接利用)
add_filter('xmlrpc_methods', function($methods) {
    unset($methods['pingback.ping']);
    unset($methods['pingback.extensions.getPingbacks']);
    return $methods;
});

// 拦截pingback请求(进一步加固)
add_action('wp_head', function() {
    if (is_singular()) {
        remove_action('wp_head', 'rsd_link'); // 移除RSD链接(包含xmlrpc地址)
        remove_action('wp_head', 'wlwmanifest_link');
    }
});​

作用:不仅禁用 XML-RPC 功能,还移除页面中暴露xmlrpc.php地址的标签(如rel="EditURI"),避免被攻击目标识别。

方法三:通过.htaccess 屏蔽访问(适合 Apache 服务器)

在网站根目录的.htaccess文件中添加规则,直接拒绝所有对xmlrpc.php的请求:

# 屏蔽xmlrpc.php访问
<Files xmlrpc.php>
    Order Allow,Deny
    Deny from all
</Files>​

优点:通过服务器层面拦截,比 PHP 代码更高效,且不受 WordPress 更新影响。

方法四:通过 Nginx 配置屏蔽(适合 Nginx 服务器)

如果使用 Nginx,在站点的 Nginx 配置文件中添加:

# 屏蔽xmlrpc.php访问
location /xmlrpc.php {
    deny all;
    return 403;
}​

添加后重启 Nginx 服务生效。

注意事项

功能影响

禁用xmlrpc.php后,依赖该文件的功能会失效,例如:

  • 远程发布文章(如通过移动客户端)
  • WordPress 的 pingback/trackback 功能
  • 部分第三方服务(如某些备份插件、社交媒体同步工具)的 API 调用
如果需要这些功能,可改用插件(如 Jetpack)提供的替代方案,或仅限制特定 IP 访问。
替代方案

若需保留部分功能,可使用插件精细化控制,例如:

    • Disable XML-RPC Pingback:仅禁用 pingback,保留其他 XML-RPC 功能
    • Wordfence:通过防火墙规则拦截恶意请求,同时允许正常使用
通过以上方法,可有效阻止针对xmlrpc.php的 DDOS 攻击,同时根据实际需求平衡功能与安全性。对于多数中小型站点,推荐直接删除文件或通过.htaccess/Nginx屏蔽,简单且高效。
打赏
MyWebServer小巧的ASP环境集成软件V3.8.40
上一篇
宝塔面板MySql进程守护脚本解决宝塔mysql数据库自动停止问题
下一篇
博主索奈
Sonay
28 文章
0 评论
0 收藏
生成中...
二维码标题