WordPress 中 xmlrpc.php 的完整指南(它是什麼、安全風險、如何禁用它)
已發表: 2020-07-06XML-RPC WordPress 規範是為了標準化不同系統之間的通信而開發的,這意味著 WordPress 之外的應用程序(例如其他博客平台和桌面客戶端)可以與 WordPress 交互。
該規範自 WordPress 成立以來一直是其一部分,並且做了非常有用的工作。 沒有它,WordPress 將處於自己的孤島中,與互聯網的其他部分分開。
但是,xmlrpc.php 也有其缺點。 它可能會給您的 WordPress 網站帶來漏洞,現在已被 WordPress REST 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 默認是關閉的。 但是從 3.5 版開始,它默認是啟用的。 這樣做的主要原因是允許 WordPress 移動應用程序與您的 WordPress 安裝進行對話。
如果您使用 3.5 版之前的 WordPress 移動應用程序,您可能還記得必須在您的網站上啟用 XML-RPC 才能使應用程序能夠發佈內容。 這是因為該應用程序本身並沒有運行 WordPress。 相反,它是一個使用 xmlrpc.php 與您的 WordPress 站點通信的單獨應用程序。
但 XML-RPC 不僅用於移動應用程序:它還用於允許 WordPress 和其他博客平台之間的通信,它啟用引用和 pingback,它為鏈接自託管 WordPress 的 Jetpack 插件提供支持網站到 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
您應該在 WordPress 站點上禁用 xmlrpc.php 的主要原因是因為它引入了安全漏洞並且可能成為攻擊的目標。
現在不再需要 XML-RPC 在 WordPress 之外進行通信,因此沒有理由保持它處於活動狀態。 這就是為什麼通過禁用它來使您的網站更安全是明智之舉。
如果 xmlrpc.php 是一個安全責任並且它不再起作用,為什麼它沒有完全從 WordPress 中刪除?
這樣做的原因是因為 WordPress 的關鍵特性之一將始終是向後兼容。 如果您管理好您的網站,您就會知道讓 WordPress 以及任何插件或主題保持最新是必不可少的。
但是總會有網站所有者不願意或無法更新他們的 WordPress 版本。 如果他們運行的版本早於 REST API,他們仍然需要訪問 xmlrpc.php。
讓我們更詳細地看一下具體的漏洞。
通過 XML-RPC Pingbacks 的 DDoS 攻擊
xmlrpc.php 啟用的功能之一是 pingbacks 和 trackbacks。 當其他博客或網站鏈接到您的內容時,這些通知會出現在您網站的評論中。
XML-RPC 規範使這種通信成為可能,但它已被 REST API 取代(正如我們已經看到的)。
如果在您的站點上啟用了 XML-RPC,黑客可能會利用 xmlrpc.php 在短時間內向您的站點發送大量 pingback,從而對您的站點發起 DDoS 攻擊。 這可能會使您的服務器超載並使您的網站無法運行。
通過 XML-RPC 的蠻力攻擊
每次 xmlrpc.php 發出請求時,它都會發送用戶名和密碼以進行身份驗證。 這帶來了重大的安全責任,並且是 REST API 不做的事情。 事實上,REST API 使用 OAuth,它發送令牌進行身份驗證,而不是用戶名或密碼。
因為 xmlrpc.php 在每個請求中都會發送身份驗證信息,因此黑客可以使用它來嘗試訪問您的站點。 像這樣的蠻力攻擊可能允許他們插入內容、刪除代碼或損壞您的數據庫。
如果攻擊者向您的站點發送了足夠多的請求,每個請求都使用不同的用戶名和密碼對,那麼他們最終有可能找到正確的請求,從而使他們能夠訪問您的站點。
這就是為什麼,如果您正在運行最新版本的 WordPress,它使用 REST API 與外部系統通信,您應該禁用 xmlrpc.php 。 它不是必需的,它可能會使您的網站容易受到攻擊。
xmlrpc.php 是否在您的 WordPress 網站上運行?
您需要做的第一件事是確定 xmlrpc.php 是否在您的 WordPress 站點上運行。
這不是檢查文件是否存在的簡單案例:它是每個 WordPress 安裝的一部分,即使 XML-RPC 被禁用,它也會存在。
要檢查您的站點上是否啟用了 xmlrpc.php,請使用 WordPress XML-RPC 驗證服務。 這將檢查您的站點並告訴您是否啟用了 xmlrpc.php。

這是我在服務上檢查此站點時得到的結果。

這表明 xmlrpc.php 在 kinsta.com 上已被禁用。 因此,如果您運行檢查並發現您的站點上仍然啟用了 xmlrpc.php,您如何將其關閉?
如何禁用 xmlrpc.php
有三種方法可以禁用 xmlrpc.php:
讓我們分別看看每一個。
如何使用插件禁用 xmlrpc.php
安裝一個插件來禁用 xmlrpc.php 是最簡單的方法。 Disable XML-RPC 插件將完全禁用它。 這是你如何使用它。
我的起點是我自己的網站,在該網站上啟用了 xmlrpc.php。 您可以通過我所做的檢查看到這一點:

通過 WordPress 管理員中的插件屏幕安裝插件,然後激活它。
您不必做任何其他事情:激活插件將導致它禁用 XML-RPC。 現在,如果我在我的網站上運行檢查,我會得到不同的結果:

就是這麼簡單!
使用插件禁用 XML-RPC Pingback
但是,如果您想禁用 xmlrpc.php 的某些方面而不是其他方面怎麼辦? Disable XML-RPC Pingback 插件允許您僅禁用 pingback 功能,這意味著您仍然可以在需要時訪問 XML-RPC 的其他功能。
該插件的工作方式與禁用 XML-RPC 插件相同:只需安裝、激活它,它就會工作。
使用插件配置 XML-RPC 和 REST API 激活
如果您想要更細粒度地控制如何在您的站點上配置 xmlrpc.php 和 REST API,您可以安裝 REST XML-RPC 數據檢查器插件。
安裝並激活此插件後,轉到設置 > REST XML-RPC 數據檢查器,然後單擊XML-RPC選項卡。

這使您可以準確配置 xmlrpc.php 的哪些方面在您的站點上處於活動狀態。
需要超快、安全且對開發人員友好的主機? Kinsta 在構建時考慮了 WordPress 開發人員,並提供了大量工具和強大的儀表板。 查看我們的計劃
或者,您可以簡單地將其完全關閉。 如果您還想控制 REST API,該插件為您提供了另一個選項卡。
如何在沒有插件的情況下禁用 xmlrpc.php
如果您不想在您的站點上安裝另一個插件,您可以通過在過濾器中添加一些代碼來禁用 xmlrpc.php,或者添加到您的 .htaccess 文件中。 讓我們看看這兩種方法。
通過過濾器禁用 xmlrpc.php
這裡的一個選項是使用xmlrpc_enabled過濾器來禁用 xmlrpc.php。 將此功能添加到插件並在您的站點上激活它:
add_filter( 'xmlrpc_enabled', '__return_false' );
您可以將其添加到您的主題函數文件中,但最好是編寫插件。
另一個選項與編輯您的 .htaccess 文件有關,該文件可用於使用 Apache 的託管服務提供商,方法是通過 FTP 或 cPanel 連接到您網站的服務器。
通過 .htacess 文件禁用 xmlrpc.php
在您的.htaccess文件中,添加以下代碼:
<Files xmlrpc.php> Order Allow,Deny Deny from all </Files>
確保在這樣做之前製作舊文件的副本,以防萬一遇到任何問題。
讓您的託管服務提供商禁用 xmlrpc.php
或者,如果檢測到攻擊,一些託管服務提供商將禁用 xmlrpc.php。
在 Kinsta,當檢測到通過 XML-RPC 進行的攻擊時,會自動將一段代碼添加到 Nginx.config 文件中:
location ~* ^/xmlrpc.php$ { return 403; }
這將產生 403 錯誤並阻止攻擊。
如果您自己這樣做,最好使用上述方法之一。 但在此之前,請務必先諮詢您的託管服務提供商。
什麼時候需要啟用 xmlrpc.php?
在某些情況下,您確實需要在 WordPress 站點上啟用 xmlrpc.php,或者您不應該完全禁用它。
這些都是:
- 您沒有運行 REST API(不建議,但在某些情況下是必要的),但需要在您的 WordPress 站點和其他系統之間進行通信。
- 您無法將 WordPress 更新到 4.4 或更高版本,因此無權訪問 REST API。 這可能是因為您的託管設置受到限制(在這種情況下我會更改託管服務提供商)或主題或插件不兼容(在這種情況下我會替換或更新它們)。
- 您正在使用無法訪問 WP REST API 但可以訪問 XML-RPC 的外部應用程序(從長遠來看,我建議更新該應用程序或切換到與 REST 兼容的應用程序)。
就是這樣! 這些都不是保持 XML-RPC 規範開啟的特別好的理由。
它仍在 WordPress 中的唯一原因是為了向後兼容,並且只有在使用過時的系統時才使用它。 對於任何想要使他們的網站保持最新並使用最新技術的人來說,禁用 xmlrpc.php 是可行的方法。
概括
XML-RPC 規範是在 WordPress 創建之前開發的,作為 WordPress 與外部系統和應用程序通信的一種方式。 它具有固有的安全漏洞,可能使您的網站容易受到攻擊。
現在 REST API 允許您的站點與其他應用程序通信,您可以安全地禁用 xmlrpc.php。 如果您按照上述步驟進行操作,禁用它可以提高您網站的安全性。