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驗證服務
輸入一個我們的測試網站,檢測網站的結果如下:
網站XML-RPC檢測-已停用狀態
這表明xmlrpc.php在該測試網站上已被停用。
命令列(高階): 您可以執行下圖所示的 cURL 命令:
curl -d "<!--?xml version='1.0'?-->system.listMethods" https://yourdomain.com/xmlrpc.php
如果收到如下所示的結構化 XML 響應,則表示已啟用。
如果您執行檢查並發現xmlrpc.php仍在站點上啟用,如何關閉它?
如何停用xmlrpc.php
停用xmlrpc.php有兩種方法:
如何使用外掛停用xmlrpc.php
(1)使用外掛停用XML-RPC
安裝外掛以停用xmlrpc.php是最簡單的方法。你可以透過安裝Disable XML-RPC外掛來實現。使用方法如下:
對一個啟用了xmlrpc.php的網站進行XML-RPC檢測,你會看到下面的結果:
網站第一次XML-RPC檢測-未停用狀態
透過WordPress儀表盤的“ 外掛”介面安裝外掛,然後將其啟用。
您無需執行其他任何操作:啟用外掛即可停用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資料檢查器
可以準確配置xmlrpc.php的哪些功能在站點上處於活動狀態。
或者,您可以將其完全關閉。而且,如果您還想控制REST API,則外掛會為您提供另一個選項卡。
如何在沒有外掛的情況下停用xmlrpc.php
如果您不想在您的站點上安裝這類外掛,則可以透過WordPress過濾器,或.htaccess檔案、Nginx配置檔案新增一些程式碼來停用xmlrpc.php 。
(1)透過過濾器停用xmlrpc.php
使用xmlrpc_enabled過濾器停用xmlrpc.php,將此功能新增到其中一個外掛並啟用即可:
add_filter( 'xmlrpc_enabled', '__return_false' );
當然也可以將其新增到主題functions檔案中,但是編寫外掛是一種更好的做法。
(2)透過.htacess檔案或者Nginx配置檔案停用xmlrpc.php
另一種選擇與編輯.htaccess檔案或者Nginx配置檔案來停用XML-RPC功能。
如果你的伺服器使用的是Apache,則網站根目錄找到.htaccess檔案中,新增以下程式碼:
<Files xmlrpc.php> Order Allow,Deny Deny from all </Files>
如果你的伺服器使用的是Nginx,將以下程式碼新增到Nginx.config檔案中:
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與外部系統和應用程式進行通訊的一種手段。
既然REST API允許您的站點與其他應用程式通訊,則可以安全地停用xmlrpc.php。按照上述步驟操作,則可以透過停用它來提高網站的安全性。
評論留言
脣槍舌劍 (1)
Bonnie
2020.7.31 22:07
如果网站安装了wordfence,是不是就不用装禁用xmlrpc.php的插件了呢