xmlrpc.php文件存在于 WordPress 网站根目录中,本意是给网站提供一种远程通信方式,让其他应用程序与 json文件早了很多。
RPC 代表远程过程调用。也就是一个程序可以要求另外一个程序做事情。而现在使用 API调用代替了 RPC调用。
二、xmlrpc.php如何工作
向 xmlrpc.php发布一条信息,启动一个 post请求,把 xml文件传递上去,就可以在 WordPress 网站中完成发布文章、pingback 等操作,而无需登录 WordPress 后台,用起来很方便。
三、xmlrpc.php带来的安全问题
很长一段时间中,xmlrpc.php是一个挺有用的工具,记得很早之前羊毛之家也尝试一段时间利用 xmlrpc.php 远程发布文章,也蛮方便和有趣的。
随着 REST API的兴起,xmlrpc.php已经被代替了,但WordPress仍然保留着这个文件。很可能给网站带来一些安全风险,被利用来攻击 WordPress 网站。
3.1、XMLRPC 蛮力攻击
XMLRPC 攻击比较简单的方法是蛮力攻击。因为利用 XMLRPC 登录需要用户名和密码登录,因此攻击者可以很方便的不断组合用户名和密码,直到找到正确的。很多站长会限制用户登录尝试次数,但不会想到阻止 XMLRPC 请求,这就为攻击者提供了可趁之机。
一旦攻击者穷举登录成功,就可以随便把广告、链接、垃圾内容写入你的数据库。小白经常发现一些新手、小白的网站后台评论,平均都有几十~几千条,把数据库搞大了,越来越臃肿,网站打开速度就慢下来了。
3.2、XMLRPC 发起 DDoS 攻击
XMLRPC 的另外一种利用方法是 pingback,恶意用户同时发出大量请求来挂掉服务器。
pingback 不但能把大量垃圾信息写入你的数据库。而且同时数百~数千个 pingback 可以让服务器瘫痪。
这也就是俗称的 DDos(分布式拒绝服务攻击),通常是由分布在世界不同地方的大量肉鸡发起的。
四、禁用 XMLRPC
有多种方法可以禁用 XMLRPC,你要根据自己的实际情况来选择合适的方法。
4.1、如果你手动更新WordPress版本,那么就直接删除 xmlrpc.php,以后更新版本时也手动删除掉安装包里面的 xmlrpc.php。
这是最直接有效的方法。带来的弊端是你也无法使用远程发布文章功能了,当然绝大多数人根本用不到。
4.2、如果你用到了 xmlrpc.php ,就不能删除。对于 apache 服务或虚拟主机,可以把下列代码添加到网站根目录的 .htaccess 文件中。
order deny,allow
deny from all
这样就把任何想要利用 xmlrpc的攻击都拦截在外面了。
4.3、主题functions.php文件
如果不喜欢在 Web 服务中添加代码,也可以在主题的 functions.php 文件中添加下面的一行代码。
add_filter(‘xmlrpc_enabled’, ‘__return_false’);
看清楚了在单词 return 之前是 2 个下划线。这也能关闭 xmlrpc。
弊端是每次主题更新都要手动添加这段代码,但保不齐哪次就忘记了,所以小白并不推荐用这个办法。
4.4、如果不想在主题 functions.php 中添加代码,可以安装插件禁用 XMLRPC。比如常见的 Wordfence Security插件、WordPress 安全插件 All In One WP Security & Firewall、SiteGround Security插件都提供禁用功能。
也有一些专门禁用 XMLRPC的插件,其实就是主题functions.php文件的代码,插件不会因为更新主题就被覆盖掉,这个禁用功能也就能一直保持工作。
五、总结
XMLRPC 在很早之前提供了很好的服务,方便、快捷、好用。但现在用的人越来越少了,那么通过上述办法禁用来保护网站安全,是每个WordPress网站必须考虑的操作。