xmlrpc.php 存在于 WordPress 网站程序中,通过使用 HTTP 作为传输机制和 XML 作为编码机制来标准化这些通信来实现此目的。然而,xmlrpc.php 文件引入了安全漏洞,并且可能成为被攻击的目标。
最近网站大量 POST 请求 xmlrpc.php,导致 CPU 负载爆满,内存也比平时占用更多,感觉是被人扫描攻击了。所以这个涉及到了 WordPress 安全,必须重视起来。
XML-RPC 是支持 WordPress 与其他系统之间通信的规范。XML-RPC 不仅用于移动应用程序:它还用于允许 WordPress 和其他博客平台之间进行通信,还支持引用和 pingback。但是由于 REST API 已集成到 WordPress 核心中,因此 xmlrpc.php 文件不再用于此通信。
如果您的站点上启用了 XML-RPC,则黑客可能会利用 xmlrpc.php 在短时间内向您的站点发送大量 pingback,从而在您的站点上发起 DDoS 攻击。这可能会使服务器超载,并使站点无法正常运行。而每次 xmlrpc.php 发出请求时,它都会发送用户名和密码进行身份验证,所以,黑客可以使用它来尝试爆破您的站点。
在此基础上,我们 还发现了攻击//xmlrpc.php
地址,来耗尽 WordPress 站点的服务器资源,所以更加推荐最后一种方法。
因此,您现在应该在站点上禁用 xmlrpc.php,但是很多人不知道该如何停用 xmlrpc.php 文件,虽然将其删除是最简单的方法,但是由于 WordPress 经常升级,又会重新生成该文件,所以在此基础上,WPEXP 跟大家分享五个禁用 xmlrpc.php 的方法,供大家选择使用。
在当前主题的 functions.php 文件添加下面这行代码就能关闭 xmlrpc.php
复制
//通过 functions.php 函数文件禁用 xmlrpc.php
add_filter('xmlrpc_enabled','__return_false');
在 WordPress 根目录编辑 wp-config.php 文件,最开始的地方添加:
复制
if(strpos($_SERVER['REQUEST_URI'],'xmlrpc.php')!==false){
$protocol = $_SERVER['SERVER_PROTOCOL']??'';
if(!in_array($protocol,['HTTP/1.1','HTTP/2','HTTP/2.0','HTTP/3'],true)){
$protocol ='HTTP/1.0';
}
header("$protocol 403 Forbidden",true,403);
die;
}
Nginx 规则
复制
location ~*^/xmlrpc.php$ {
return403;
}
Apache 规则
在 .htaccess 文件前面添加以下代码。
复制
<Filesxmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
这个的前提要求需要保护好自己的服务器 IP 不被发现,在此基础上可以在云防火墙或者 CDN 中写好阻止 xmlrpc.php 访问,比上述所有配置都要进一步降低服务器性能的消耗,因为它还没有请求你服务器就被拦截了。
这里以 CloudFlare WAF 防火墙为例,在添加/xmlrpc.php
基础上,再添加一个//xmlrpc.php
以防万一。怕大家看不懂,这里使用 URI 完整,小伙伴们可以考虑使用 URI 包含规则,填写一个/xmlrpc.php
即可。
退而求其次,如果你有使用宝塔的 Nginx 防火墙,那么也可以使用防火墙来阻止 xmlrpc.php 访问。但是这个毕竟还是会涉及服务器资源的占用,在能够做好 IP 不泄露的情况下,使用云端防火墙或 CDN 去阻止是最好的!