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

重點整理
- Wordfence 提供防毒及防火牆功能
- XML-RPC 服務預設為開啟狀態,卻會遭受惡意攻擊
- XML-RPC 提供對外程式呼叫服務
- 使用 Disable XML-RPC 外掛或修改原始碼關閉服務
- 可直接設定網站伺服器拒絕回應 xmlrpc.php
相關學習文章
- WordPress WPS Hide Login 外掛教學,隱藏登入網址,防止暴力登入攻擊
- WordPress 強制使用 https 連線 (使用 SSL 憑證)
- WordPress 增加熱門文章外掛 - WP-PostViews
原始文章連結: https://blog.hungwin.com.tw/wordpress-disable-xmlrpc/
Like my work?
Don't forget to support or like, so I know you are with me..
Comment…