xmlrpc.php文件存在于 WordPress 网站根目录中,本意是给网站提供一种远程通信方式,让其他应用程序与 WordPress 博客进行通信使用。但随着时代发展,这个文件存在的意义越来越小,并给 WordPress 网站带来了不小的安全威胁。
一、xmlrpc.php是什么
XML是 xml格式文件,比现在常见的 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 文件中。
< Files xmlrpc.php >
order deny,allow
deny from all
< /Files >
这样就把任何想要利用 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网站必须考虑的操作。
魏艾斯笔记