对于大多数不需要远程发布或使用 Jetpack 等特定插件的 WordPress 站点,最稳妥的处理方式是直接禁用 XML-RPC 接口,以阻断潜在的暴力破解和 DDoS 攻击路径。
先说结论:除非明确依赖该接口,否则建议彻底关闭,优先通过代码或服务器配置实现。
- 先判断:确认站点是否使用 Jetpack、手机 App 或其他依赖 XML-RPC 的第三方服务。
- 优先做:通过主题 functions.php 添加过滤代码,或在服务器层(Nginx/Apache)禁止访问 xmlrpc.php。
- 再验证:使用 curl 命令或在线工具测试接口是否返回 403 禁止访问或功能失效。
风险原理
XML-RPC 是 WordPress 早期用于远程过程调用的协议,允许客户端通过 HTTP 请求执行服务器上的方法。从 WordPress 3.5 版本开始,该功能默认开启。虽然它方便了一些远程管理操作,但也带来了显著的安全风险。
主要隐患包括:
- 暴力破解:攻击者可以通过 xmlrpc.php 绕过后台登录次数限制,单次请求即可尝试多个密码。
- DDoS 攻击:利用 Pingback 功能,攻击者可以伪造请求让大量网站同时访问目标站点,消耗服务器资源。
- SSRF 漏洞:在旧版本(如 3.5.1 之前)中,可能存在服务器端请求伪造风险,导致内网探测。
操作前准备
在进行任何配置修改前,请务必备份网站文件和数据库,以防配置错误导致网站不可用。
- 备份当前主题目录下的
functions.php文件。 - 备份服务器配置文件(Nginx.conf 或 .htaccess)。
- 确认当前 WordPress 版本及是否依赖 Jetpack 插件。
具体实施方法
选择以下一种方法即可,不建议同时使用多种以免冲突。
方法一:通过 functions.php 禁用(推荐)
进入当前主题目录,编辑 functions.php 文件,在末尾添加以下代码。此方法兼容性最好,修改保存即生效。
add_filter('xmlrpc_enabled', '__return_false');方法二:Nginx 配置禁止访问
修改 Nginx 配置文件,在 server 块中添加以下规则,然后重载配置。
location ~* /xmlrpc.php { deny all; }重载命令:nginx -s reload
方法三:Apache .htaccess 禁止访问
在网站根目录下的 .htaccess 文件中添加以下规则。注意 Apache 2.4+ 版本需使用新语法。
<Files xmlrpc.php>
Require all denied
</Files>验证生效
完成配置后,可以通过以下方法验证接口是否已关闭。
方法 1:命令行测试
在终端执行 curl 请求,观察返回状态码。注意根据站点实际协议调整 http/https。
curl -i https://你的域名/xmlrpc.php如果配置成功,应返回 403 Forbidden(服务器拦截)或 405 Method Not Allowed,而不是 200 OK。
方法 2:在线工具
使用公开的 XML-RPC 漏洞扫描工具或 Pingback 测试工具,确认无法通过接口调用方法。
常见坑
- 不要直接删除文件:不建议直接删除 xmlrpc.php 文件,因为 WordPress 升级后会自动恢复该文件,导致防护失效。
- 插件冲突:部分安全插件也提供关闭 XML-RPC 的功能,如果同时使用代码禁用,可能产生冗余,但通常不会冲突。
- Jetpack 用户:如果必须使用 Jetpack,不能完全禁用,建议通过安全插件限制访问 IP 或启用双因素认证来降低风险。
- Apache 版本差异:Apache 2.4 及以上版本已废弃 Order 指令,需使用 Require 指令,否则配置无效。