适用人群
本教程适用于所有使用 WordPress 建站的用户,尤其是:
- 个人博客站长,担心被暴力破解登录密码;
- 企业网站管理员,需要提升站点安全等级;
- 刚接触 WordPress 的新手,想跟着操作就能完成加固;
- 被大量垃圾评论、pingback 攻击骚扰的站点维护者。
如果你不需要使用“手机 App 发布文章”“Jetpack 部分辅助功能”“远程桌面客户端”等依赖 XML-RPC 的服务,那么禁用 XML-RPC 是一个低成本、高收益的安全操作,下面我会带你一步步完成。
先搞清楚:为什么要禁用 XML-RPC?
XML-RPC 是 WordPress 早期留下的远程调用接口,位于 /xmlrpc.php,它本意是为了允许外部程序发布内容、获取评论等,但它同时带来了两个严重问题:
- 放大暴力破解攻击:攻击者可以通过
system.multicall方法在一个请求里尝试几百个密码,导致服务器负载飙升,并大大增加爆破成功率。 - Pingback 攻击/SSRF:攻击者可以利用 pingback 功能让服务器去请求任意内网地址,造成 SSRF 漏洞,甚至被用来发起 DDoS。
在绝大多数非必要情况下,直接禁用 XML-RPC 是 WordPress 安全加固的重要一环。

WordPress站点安全加固,彻底禁用XML-RPC的完整实战指南
完整搭建步骤
第一步:检测你的站点是否开启了 XML-RPC
在终端或浏览器访问以下地址:
https://你的域名/xmlrpc.php
如果页面显示 XML-RPC server accepts POST requests only. 或返回 XML 代码,说明 XML-RPC 是开启的,如果返回 403 或 404,说明已经禁用。
你也可以用命令行发送一个 POST 请求来验证:
curl -X POST https://你的域名/xmlrpc.php -d '<?xml version="1.0"?><methodCall><methodName>system.listMethods</methodName><params></params></methodCall>'
如果返回一堆方法列表,说明接口可用;如果返回错误或拒绝,说明已禁用。
第二步:方法一,通过主题 functions.php 禁用(适合新手)
打开当前主题的 functions.php 文件,在底部添加以下代码:
// 彻底禁用 XML-RPC
add_filter('xmlrpc_enabled', '__return_false');
// 移除 RSD 链接(前端 head 中的 xmlrpc 广告标签)
remove_action('wp_head', 'rsd_link');
// 移除 X-Pingback 响应头
add_filter('wp_headers', function($headers) {
unset($headers['X-Pingback']);
return $headers;
});
保存后回到后台,重新访问 /xmlrpc.php,如果返回 403 或空白,说明禁用成功。
注意:这个方法依赖当前主题,如果你更换主题,代码就会失效,所以更推荐下面的“站点专属插件”方法。
第三步:方法二,做成站点专属插件(推荐)
在 wp-content/plugins 目录下新建一个文件夹 disable-xmlrpc,里面创建文件 disable-xmlrpc.php,写入:
<?php
/**
* Plugin Name: Disable XML-RPC
* Description: 彻底禁用 WordPress XML-RPC 功能。
* Version: 1.0
*/
add_filter('xmlrpc_enabled', '__return_false');
remove_action('wp_head', 'rsd_link');
add_filter('wp_headers', function($headers) {
unset($headers['X-Pingback']);
return $headers;
});
然后在 WordPress 后台插件列表里启用它,这样即使更换主题,禁用依然生效。
第四步:方法三,通过 Apache .htaccess 禁用(服务器级别)
如果你使用的是 Apache 服务器,可以在 .htaccess 文件顶部(# BEGIN WordPress 之前)加入以下代码:
<Files "xmlrpc.php"> Require all denied </Files>
如果是 Apache 2.2 或更低版本,换成:
<Files "xmlrpc.php"> Order Deny,Allow Deny from all </Files>
保存后刷新,这个方法直接从服务器层面“焊死”了 /xmlrpc.php,即使代码被绕过也访问不了。
第五步:方法四,通过 Nginx 禁用
如果你使用 Nginx 服务器,在站点配置文件的 server 块内加入:
location = /xmlrpc.php {
deny all;
access_log off;
}
然后测试并重载配置:
nginx -t systemctl reload nginx
这样访问 /xmlrpc.php 会直接返回 403 Forbidden。
配置要点
-
不要只删除 RSD 链接,很多人只在
functions.php里删除rsd_link,以为就禁用了 XML-RPC。rsd_link只是删掉了页面 head 里的资源声明链接,并不影响/xmlrpc.php本身被访问,必须加上add_filter('xmlrpc_enabled', '__return_false')或服务器拦截。 -
如果你需要兼容 Jetpack 或手机 App,建议不要直接禁用所有 XML-RPC,你可以通过插件限制只允许特定 IP 访问,或者只允许特定方法,但如果你只是普通博客,建议彻底关闭。
-
禁用 XML-RPC 不等于禁用 REST API,WordPress 新版的 REST API 是另外一套体系,不影响你使用古腾堡编辑器、文章自动保存等核心功能,请放心。
-
修改 .htaccess 和 nginx.conf 前一定要备份,万一手误写错,可能导致整个网站打不开,备份后如果出现问题,可以立刻还原。
常见踩坑提醒
-
在子主题里改了 functions.php,但父主题升级后失效?
子主题没问题,但如果你直接改的是父主题,下次父主题更新会被覆盖,所以优先使用“站点专属插件”方案。 -
用了安全插件又手动禁用,导致冲突。
很多安全插件本身带有“禁用 XML-RPC”开关,如果你在代码里手动禁用,又同时在插件里开启(或相反),可能造成行为不一致,建议选一种方式,并保持追踪。 -
测试时发现仍然能访问。
检查是否有 CDN 或反向代理缓存,如果你用了 Cloudflare 等 CDN,xmlrpc.php可能被缓存,需要在 CDN 后台清除缓存或设置缓存忽略该路径,同时确认自己修改的是当前生效的服务器配置文件。 -
禁用后忘记了某些服务依赖它。
比如你之前一直在用手机 App 发文章,禁用后 App 会无法连接,建议禁用前确认自己是否真的不需要远程发布,如果以后需要,重新启用即可。
最后验证
完成以上任一方案后,再执行一次检测:
curl -I https://你的域名/xmlrpc.php
看到 403 Forbidden 或 404 Not Found,说明你已经成功禁用了 XML-RPC。
从现在开始,你的 WordPress 站点少了一个被攻击的入口,安全等级提升了一个台阶,动手操作一遍,你的网站就比其他没加固的站点更安全了。
发表评论