如何停用xmlrpc.php以確保WordPress安全

xmlrpc-php-1024x512-1

WordPress的XML-RPC規範是為了標準化不同系統之間的通訊,這意味著WordPress外部的應用程式(例如其他部落格平臺和桌面客戶端)可以與WordPress進行互動。

自WordPress誕生以來,該規範一直是WordPress的一部分,並且非常有用。沒有它,WordPress將會置身於孤島,與網際網路其他組成部分分道揚鑣。

但是,xmlrpc.php有其缺點。透過它,可以向您的WordPress網站注入漏洞,現已被WordPress REST API取代,透過API將WordPress開放給其他應用程式方面做得更好。

在本文中,我們將解釋什麼是xmlrpc.php,為什麼要停用它,及如何確定它是否正在WordPress網站上執行。

什麼是xmlrpc.php?

XML-RPC是支援WordPress與其他系統之間通訊的規範。它透過使用HTTP作為傳輸機制和XML作為編碼機制來標準化這些通訊來實現此目的。

XML-RPC早於WordPress:它出現在b2部落格軟體中,該軟體於2003年建立了WordPress。該系統的程式碼儲存在站點根目錄下的xmlrpc.php檔案中。即使XML-RPC在很大程度上已經過時,它仍然存在。

在WordPress的早期版本中,預設情況下已關閉XML-RPC。但是自v3.5版本開始,預設情況下又啟用它。這樣做的主要原因是允許WordPress移動應用程式與WordPress安裝進行對話通訊。

如果您在v3.5版本之前使用WordPress移動應用程式,可能會記得必須在站點上啟用XML-RPC才能使用該應用程式釋出內容。這是因為該應用程式本身未執行WordPress。相反,它是一個單獨的應用程式,透過xmlrpc.php與WordPress網站進行通訊。

但是XML-RPC不僅用於移動應用程式:它還用於允許WordPress和其他部落格平臺之間進行通訊,還支援引用和pingback,併為Jetpack外掛提供支援,該外掛可連結自託管的WordPress網站至著名的WordPress.com平臺。

但是由於REST API已整合到WordPress核心中,因此xmlrpc.php檔案不再用於此通訊。相反,REST API用於與WordPress移動應用程式,桌面客戶端,其他部落格平臺,WordPress.com(用於Jetpack外掛)以及其他系統和服務進行通訊。REST API-可與之互動的系統範圍比xmlrpc.php所允許的大得多。此外,擁有更強的靈活性。

既然REST API取代了XML-RPC,因此我們應該在站點上停用xmlrpc.php。

為什麼會有xmlrpc.php?

xmlrpc.php 的存在源於 WordPress 對開放性和可擴充套件性的承諾。在引入 REST API 之前,XML-RPC 是實現遠端操作的唯一方法,例如

  • 遠端釋出文章:移動應用程式或桌面客戶端可以建立、編輯或刪除帖子,而無需登入網路儀表板。
  • Trackbacks 和 pingbacks:這些功能允許部落格在連結到一篇文章時相互通知,促進了早期部落格社羣的發展。
  • 外掛整合: 一些外掛(如 Jetpack)依靠 XML-RPC 同步資料並啟用高階功能。

從 WordPress 3.5 開始,xmlrpc.php 預設啟用,以確保無縫遠端釋出。然而,隨著網路標準的發展,人們需要更安全、更高效的通訊方法。

為什麼要停用xmlrpc.php

在WordPress網站上停用xmlrpc.php的主要原因是因為可以透過它注入安全漏洞,  並且xmlrpc.php可能成為攻擊的目標。

既然不再需要XML-RPC在WordPress之外進行通訊,就沒有理由保持它的啟用狀態。這就是為什麼透過停用它來提高站點安全性。

如果xmlrpc.php會對WordPress網站造成安全隱患,那麼為什麼不將其完全從WordPress中刪除呢?

這是因為WordPress的主要功能之一始終是向後相容。對網站進行良好的管理,就應該知道保持WordPress以及任何外掛或主題版本為最新是必不可少的。

但是總會有那麼一群站長不願或無法更新其WordPress版本至最新版本。如果安裝的WordPress版本早於REST API,則這些站點仍然需要訪問xmlrpc.php。

透過XML-RPC Pingbacks進行DDoS攻擊

xmlrpc.php啟用的功能之一是pingback和Trackbacks。當另一個部落格或網站連結到你的部落格文章時,這些通知將顯示在您網站的評論中。

XML-RPC規範使這種通訊成為可能,但已被REST API取代(如我們所見)。

如果您的站點上啟用了XML-RPC,則駭客可能會利用xmlrpc.php在短時間內向您的站點傳送大量pingback,從而在您的站點上發起DDoS攻擊。這可能會使伺服器超載,並使站點無法正常執行。

透過XML-RPC的暴力攻擊

每次xmlrpc.php發出請求時,它都會傳送使用者名稱和密碼進行身份驗證。這帶來了重大的安全隱患,而REST API卻沒有這一點弊端。實際上,REST API使用OAuth來傳送用於身份驗證的令牌,而不是使用者名稱或密碼。

因為xmlrpc.php隨每個請求傳送身份驗證資訊,所以駭客可以使用它來嘗試訪問您的站點。這樣的暴力攻擊可能使他們可以插入內容,刪除程式碼或破壞資料庫。

攻擊者可以訪問該系統。多呼叫技術透過在單個 HTTP 請求中嘗試數百次密碼猜測,提高了暴力攻擊的效率。

如果攻擊者向您的站點傳送了足夠多的請求,每個請求使用不同的使用者名稱和密碼對,則它們最終有可能會被攻擊到正確的請求,從而使他們可以訪問您的站點。

因此,如果您正在執行WordPress的最新版本(使用REST API與外部系統進行通訊),則應停用xmlrpc.php,以免你的網站易受攻擊。

證書洩露

您的使用者名稱和密碼與每個 XML-RPC 請求一起傳送,因此更有可能在未受保護的連線中被攔截。

資源耗盡

重複或複雜的 XML-RPC 呼叫會使伺服器超載,尤其是在共享或資源有限的主機上。

由於存在這些風險,大多數安全專家和 Cloudways 等託管主機建議停用 xmlrpc.php,除非您有特定的合法需求。

REST API與xmlrpc.php – 有什麼區別?

WordPress 4.7 中引入的 REST API 標誌著一個重大轉變。下面是一個技術比較,以便更好地理解:

特徵 xmlrpc.php REST API
資料格式 XML JSON
協議 XML-RPC over HTTP RESTful HTTP
驗證 使用者名稱/密碼(基本驗證) OAuth、應用程式密碼
可擴充套件性 有限 高度可擴充套件性
安全性 易受暴力/DDoS 攻擊 更強的身份驗證、速率限制
預設可用性 預設已啟用(REST 前) 自 4.7 起成為核心功能

REST API 速度更快、更安全、對開發人員更友好。大多數現代外掛和整合現在都使用 REST API,而不是 xmlrpc.php。

xmlrpc.php是否在您的WordPress網站上執行?

那麼我們如何確定xmlrpc.php是否正在WordPress網站上執行。

並非簡單地檢查該檔案是否存在:xmlrpc.php是每個WordPress安裝的一部分,即使停用了XML-RPC,它仍然存在。

刪除任何內容之前,請務必備份您的網站(注:對網站系統任何核心檔案進行修改刪除及處理資料庫等操作,建議儘可能先備份原檔案或者資料庫,再執行操作,以免造成不必要的麻煩)。在這種情況下,不要僅僅刪除xmlrpc.php檔案,因為它會破壞您的站點。

有幾種方法可以驗證 WordPress 網站上的 xmlrpc.php 是否處於活動狀態。

你可以直接從瀏覽器檢查,訪問 https://yourdomain.com/xmlrpc.php 。

  • 如果你看到 “XML-RPC 伺服器只接受 POST 請求”,說明它已啟用。
  • 如果出現 403 或 404 錯誤,則表示已停用或阻止。

要檢查您的站點上是否啟用了xmlrpc.php,請使用 WordPress XML-RPC 驗證服務。這將檢查您的站點並告知你網站是否啟用了xmlrpc.php。

WordPress XML-RPC驗證服務

WordPress XML-RPC驗證服務

輸入一個我們的測試網站,檢測網站的結果如下:

網站XML-RPC檢測-已停用狀態

網站XML-RPC檢測-已停用狀態

這表明xmlrpc.php在該測試網站上已被停用。

命令列(高階): 您可以執行下圖所示的 cURL 命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
curl -d "<!--?xml version='1.0'?-->system.listMethods" https://yourdomain.com/xmlrpc.php
curl -d "<!--?xml version='1.0'?-->system.listMethods" https://yourdomain.com/xmlrpc.php
curl -d "<!--?xml version='1.0'?-->system.listMethods" https://yourdomain.com/xmlrpc.php

如果收到如下所示的結構化 XML 響應,則表示已啟用。

結構化 XML 響應

如果您執行檢查並發現xmlrpc.php仍在站點上啟用,如何關閉它?

如何停用xmlrpc.php

停用xmlrpc.php有兩種方法:

  1. 如何使用外掛停用xmlrpc.php
  2. 如何在沒有外掛的情況下停用xmlrpc.php

如何使用外掛停用xmlrpc.php

(1)使用外掛停用XML-RPC

安裝外掛以停用xmlrpc.php是最簡單的方法。你可以透過安裝Disable XML-RPC外掛來實現。使用方法如下:

對一個啟用了xmlrpc.php的網站進行XML-RPC檢測,你會看到下面的結果:

網站第一次XML-RPC檢測-未停用狀態

網站第一次XML-RPC檢測-未停用狀態

透過WordPress儀表盤的“ 外掛”介面安裝外掛,然後將其啟用。

您無需執行其他任何操作:啟用外掛即可停用XML-RPC。再次對該測試網站進行檢查,則會得到不同的結果:

網站第二次XML-RPC檢測-已停用狀態

網站第二次XML-RPC檢測-已停用狀態

(2)使用外掛停用XML-RPC Pingbacks

但是,如果要停用xmlrpc.php的某部分功能,比如Pingback,該怎麼辦?使用Disable XML-RPC Pingback外掛,您可以僅停用pingback功能,這意味著如果需要,您仍然可以訪問XML-RPC的其他功能。

(3)使用外掛配置XML-RPC和REST API啟用

如果要對站點上的xmlrpc.php和REST API的配置方式進行更細緻的控制,可以安裝REST XML-RPC Data Checker外掛。
安裝並啟用此外掛後,轉到 設定>REST XML-RPC Data Checker ,然後單擊“ XML-RPC”選項卡。

REST XML-RPC資料檢查器

REST XML-RPC資料檢查器

可以準確配置xmlrpc.php的哪些功能在站點上處於活動狀態。

或者,您可以將其完全關閉。而且,如果您還想控制REST API,則外掛會為您提供另一個選項卡。

如何在沒有外掛的情況下停用xmlrpc.php

如果您不想在您的站點上安裝這類外掛,則可以透過WordPress過濾器,或.htaccess檔案、Nginx配置檔案新增一些程式碼來停用xmlrpc.php 。

(1)透過過濾器停用xmlrpc.php

使用xmlrpc_enabled過濾器停用xmlrpc.php,將此功能新增到其中一個外掛並啟用即可:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
add_filter( 'xmlrpc_enabled', '__return_false' );
add_filter( 'xmlrpc_enabled', '__return_false' );
add_filter( 'xmlrpc_enabled', '__return_false' );

當然也可以將其新增到主題functions檔案中,但是編寫外掛是一種更好的做法。

(2)透過.htacess檔案或者Nginx配置檔案停用xmlrpc.php

另一種選擇與編輯.htaccess檔案或者Nginx配置檔案來停用XML-RPC功能。

如果你的伺服器使用的是Apache,則網站根目錄找到.htaccess檔案中,新增以下程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
<Files xmlrpc.php> Order Allow,Deny Deny from all </Files>
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>

如果你的伺服器使用的是Nginx,將以下程式碼新增到Nginx.config檔案中:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
location ~* ^/xmlrpc.php$ {
return 403;
}
location ~* ^/xmlrpc.php$ { return 403; }
location ~* ^/xmlrpc.php$ {
return 403;
}

您何時需要啟用xmlrpc.php?

在某些情況下,需要在WordPress網站上啟用xmlrpc.php,或者不應該完全停用它。

  • 沒有執行REST API(不建議使用,但在某些情況下是必需的),但需要在WordPress網站和其他系統之間進行通訊。
  • 無法將WordPress更新至版本4.4或更高版本,因此無權訪問REST API。這可能是由於主題或外掛不相容,如果可能,建議儘快使用代替主題或者外掛。
  • 正在使用無法訪問WP REST API但可以訪問XML-RPC的外部應用程式(從長遠來看,建議更新該應用程式或切換到相容REST API的應用程式)。

以上這些都不是堅持繼續啟用XML-RPC理由,是一種“不思進取”的行為。

它仍然存在於WordPress中的唯一原因是為了向後相容,只有在使用過時的系統時才使用它。對於任何想要使其站點保持最新狀態並使用最新技術的人,停用xmlrpc.php才是正路。

常見問題

問:什麼是 WordPress 中的 xmlrpc.php?

答:這是一個核心檔案,允許遠端應用程式和服務透過 XML-RPC 協議與 WordPress 網站互動。

問:我應該停用 xmlrpc.php 嗎?

答:是的,除非遠端釋出或某些外掛特別需要它。

問:現代 WordPress 還需要 xmlrpc.php 嗎?

答:很少–大多數現代整合都使用 REST API。

小結

XML-RPC規範是在WordPress建立之前就開發了,它是WordPress與外部系統和應用程式進行通訊的一種手段。XML-RPC曾經是WordPress的重要組成部分,但現在它可以成為WordPress網站的安全風險,如非必要,我們應該停用它。

既然REST API允許您的站點與其他應用程式通訊,則可以安全地停用xmlrpc.php。按照上述步驟操作,則可以透過停用它來提高網站的安全性。

評論留言

脣槍舌劍 (1)

  • Bonnie的頭像

    Bonnie

    2020.7.31 22:07

    如果网站安装了wordfence,是不是就不用装禁用xmlrpc.php的插件了呢

    回覆