工程師 Mars

在這裡我想跟你分享如何成為一位稱職的軟體工程師, 你將會學到許多網站架設、WordPress、程式交易、資料庫等技能。 讓你在職場表現令人讚賞,年年升職加薪。 轉職成功,走在科技路上,永遠不怕被淘汱。 提昇技術能力,接案賺外快,自己為自己加薪。 個人技術 Blog 連結 https://blog.hungwin.com.tw/

WordPress 如何關閉 XML-RPC 服務,避免資安攻擊風險

發布於
XML-RPC 是 WordPress 提供對外遠端程式呼叫的 API 接口,可提供外部系統透過 XML-RPC API 執行遠端發文管理。WordPress 預設開啟對外 API 服務,同時也潛藏著資安風險,在 2014 年曾經發生過一次大規模的攻擊事件,是由 XML-RPC 漏洞所引起,如果你的網站並沒有使用 XML-RPC 服務,建議關閉 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 頁面

在文件內增加此語法,並放在 <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>

語法中 <add ipAddress="127.0.0.1" subnetMask="255.255.255.255" allowed="true" /> 指的是允許本機 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

相關學習文章

原始文章連結: https://blog.hungwin.com.tw/wordpress-disable-xmlrpc/

喜歡我的文章嗎?
別忘了給點支持與讚賞,讓我知道創作的路上有你陪伴。

CC BY-NC-ND 2.0 版權聲明

WordPress 強制使用 https 連線 (使用 SSL 憑證)

WordPress WPS Hide Login 外掛教學,隱藏登入網址,防止暴力登入攻擊

看不過癮?

一鍵登入,即可加入全球最優質中文創作社區