WordPress 如何关闭 XML-RPC 服务,避免资安攻击风险

为了提升 WordPress 站台安全性,我安装了防火墙及防毒外挂 Wordfence,此外挂提供了基本的站台防护能力,且提供即时恶意攻击监控,我在即时监控的记录中发现了有外部骇客正不断的暴力攻击 /xmlrpc.php 应用程序。

此骇客来至世界各地的主机,攻击时间几乎是 24 小时不停歇,从记录中发现骇客使用不同的帐号密码尝试登入服务。
除了此 xmlrpc.php 的登入攻击,还有 wp-login.php 也同样遭遇暴力登入攻击,如何解决 wp-login.php 暴力登入攻击可参考另一篇文章: WordPress WPS Hide Login 外挂教学,隐藏登入网址,防止暴力登入攻击。

这一篇文章将会来教学如何关闭 XML-RPC 服务,避免资安攻击风险

什麽是 XML-RPC

XML-RPC 是 WordPress 提供对外远端程序呼叫 (Remote Procedure Call ; RPC) 的 API 接口,可提供外部系统透过 XML-RPC API 执行远端发文管理。
常用外部服务例如 Blogger, metaWeblog, Movable Type 或是 Pingback 等等,可与 XML-RPC 串接服务。
XML-RPC 使用 http 协定作为传送机制,串接页面为 /xmlrpc.php,在 3.5 版开始,预设会启用此功能。
WordPress 预设开启对外 API 服务,同时也潜藏着资安风险,在 2014 年曾经发生过一次大规模的攻击事件,是由 XML-RPC 漏洞所引起,如果你的网站并没有使用 XML-RPC 服务,建议关闭 XML-RPC 服务以避免资安风险。

测试是否启用服务

自我网址检测

如果用网址打开 WordPress 的 /xmlrpc.php 页面,会显示此回应讯息。

此讯息为 XML-RPC 服务正启用,但只接受 POST 呼叫要求。

XML-RPC 服务连线测试

测试网址: https://xmlrpc.eritreo.it/
在 Address 上输入WordPress 网址的 /xmlrpc.php 後,再自己决定是否输入帐号密码测试 XML-RPC 系统回应。

按下「Check」查看系统回应。
若不输入帐号密码且 XML-RPC 正常运作中,则会要求再次输入帐号密码登入。

若出现其他的错误回应,则表示测试连线不成功。

如何关闭 XML-RPC 服务

方法1: 安装 Disable XML-RPC 外挂

外挂名称: Disable XML-RPC
官网介绍: https://tw.wordpress.org/plugins/disable-xml-rpc/
在後台「安装外挂」输入「Disable XML-RPC」後安装并启用外挂。

安装後并启用就好了,不需要特别的设定,启用此外挂之後,它会停用 XML-RPC 的方法,但不会阻挡连线,所以在测试的时候会发现一样可连线 /xmlrpc.php ,但执行服务呼叫时会发生错误。

方法2: 修改 php 档案,停用 XML-RPC

开启「外观 > 布景主题编辑器」

右侧「布景主题档案」选择「functions.php」,在语法内增加指令

add_filter('xmlrpc_enabled', '__return_false');

修改完「更新档案」。
此修改会停用 XML-RPC 的方法,但不会阻挡连线,所以在测试的时候会发现一样可连线 /xmlrpc.php ,但执行服务呼叫时会发生错误。

方法3: 停用 xmlrpc.php 系统回应 (适用 Apache 架站)

如果你不想安装外挂,可修改 Apache 站台底下 WordPress 根目录的 .htaccess 文件,设定网站拒绝回应 xmlrpc.php 页面
在文件底部增加此语法

# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order deny,allow
deny from all
allow from 127.0.0.1
</Files>

语法中 allow from 127.0.0.1 指的是允许本机 IP 可接受连线,你也可以改为你可连线的 IP,若不会使用 XML-RPC可以删除这一行。

设定完成记录重启 Apache 网站服务。

方法4: 停用 xmlrpc.php 系统回应 (适用 IIS 架站)

如果你不想安装外挂,可修改 IIS 站台底下 WordPress 根目录的 web.config 文件,设定网站拒绝回应 xmlrpc.php 页面
在文件内增加此语法,并放在 范围内

<location path="xmlrpc.php">
<system.webServer>
  <security>
	<ipSecurity allowUnlisted="false">
	  <add ipAddress="127.0.0.1" subnetMask="255.255.255.255" allowed="true" />
	</ipSecurity>
  </security>
</system.webServer>
</location>

语法中 指的是允许本机 IP 可接受连线,你也可以改为你可连线的 IP,若不会使用 XML-RPC可以删除这一行。

完整语法参考

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<location path="xmlrpc.php">
	<system.webServer>
	  <security>
		<ipSecurity allowUnlisted="false">
		  <add ipAddress="127.0.0.1" subnetMask="255.255.255.255" allowed="true" />
		</ipSecurity>
	  </security>
	</system.webServer>
	</location>
</configuration>

设定完成记录重启 IIS 网站服务。

修改完後再执行网址测试,就会回应 500 错误。

使用 XML-RPC 服务测试时,也会得到 500 错误。

重点整理

  1. Wordfence 提供防毒及防火墙功能
  2. XML-RPC 服务预设为开启状态,却会遭受恶意攻击
  3. XML-RPC 提供对外程序呼叫服务
  4. 使用 Disable XML-RPC 外挂或修改原始码关闭服务
  5. 可直接设定网站服务器拒绝回应 xmlrpc.php

相关学习文章

WordPress WPS Hide Login 外挂教学,隐藏登入网址,防止暴力登入攻击
WordPress 强制使用 https 连线 (使用 SSL 凭证)
如何在 WordPress 设定 Google reCAPTCHA 保护(登入、留言、联络)表单,免遭恶意攻击


<<:  Day11 小实作-数字时钟

>>:  Day11 Redis组态档设定-EVENT NOTIFICATION/GOPHER SERVER/ADVANCED CONFIG/ACTIVE DEFRAGMENTATION

Day 15 - UML x Interface — Notifier

UML Notifier 的 UML 主要是根据 Ant Design 的设计画出来的,而在 Ma...

[ 卡卡 DAY 19 ] - React Native 用 react-native-webview 实现 webview 跟 html render

在 App 需求中 若页面需要通过 URL 渲染远端 HTML 页面 若页面资料提供的是 html...

伸缩自如的Flask [day 17] Docker image化--安装篇

假设你今天很辛苦的把flask前後端都写好了, 在自己的电脑上运行,操作都没问题,终於把难缠的bug...

【Day13】[资料结构]-二元树Binary Tree

二元树(Binary Tree)是最广泛被使用的树状资料结构,简单来说即为每个节点最多只能有两个子节...

大共享时代系列_023_可多人协作的试算表软件

试算表不是只有 GoogleSheet 跟 Excel ... 爲什麽试算表需要多人协作? 在不能多...