WordPress 如何關閉 XML-RPC 服務,避免資安攻擊風險
為了提升 WordPress 站台安全性,我安裝了防火牆及防毒外掛 Wordfence,此外掛提供了基本的站台防護能力,且提供即時惡意攻擊監控,我在即時監控的記錄中發現了有外部駭客正不斷的暴力攻擊 /xmlrpc.php 應用程式。
此駭客來至世界各地的主機,攻擊時間幾乎是 24 小時不停歇,從記錄中發現駭客使用不同的帳號密碼嘗試登入服務。
除了此 xmlrpc.php 的登入攻擊,還有 wp-login.php 也同樣遭遇暴力登入攻擊,如何解決 wp-login.php 暴力登入攻擊可參考另一篇文章: WordPress WPS Hide Login 外掛教學,隱藏登入網址,防止暴力登入攻擊。
這一篇文章將會來教學如何關閉 XML-RPC 服務,避免資安攻擊風險
Contents
什麼是 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」,在語法內增加指令
1 |
add_filter('xmlrpc_enabled', '__return_false'); |
修改完「更新檔案」。
此修改會停用 XML-RPC 的方法,但不會阻擋連線,所以在測試的時候會發現一樣可連線 /xmlrpc.php ,但執行服務呼叫時會發生錯誤。
方法3: 停用 xmlrpc.php 系統回應 (適用 Apache 架站)
如果你不想安裝外掛,可修改 Apache 站台底下 WordPress 根目錄的 .htaccess 文件,設定網站拒絕回應 xmlrpc.php 頁面
在文件底部增加此語法
1 2 3 4 5 6 |
# 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> 範圍內
1 2 3 4 5 6 7 8 9 |
<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可以刪除這一行。
完整語法參考
1 2 3 4 5 6 7 8 9 10 11 12 |
<?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 資訊安全防護外掛 All In One WP Security & Firewall 安裝介紹
- 如何在 WordPress 設定 Google reCAPTCHA 保護(登入、留言、聯絡)表單,免遭惡意攻擊
如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝
XML-RPC 服務連線測試
測試網址: https://xmlrpc.eritreo.it/
這個網站好像已經停止使用了?
安裝 Disable XML-RPC 外掛以後直接開啟 xmlrpc.php 好像還是可以看見內容
不知道除了還有沒有其他測試 xmlrpc 用的網站?