開發XML-RPC WordPress規范是為了標准化不同系統之間的通信,這意味着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。但是從3.5版開始,默認情況下已啟用它。這樣做的主要原因是允許WordPress移動應用程序與您的WordPress安裝進行對話。
如果您在3.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功能更強,使用更靈活。
由於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啟用的功能之一是pingback和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文件,因為它會破壞您的站點。
要檢查您的站點上是否啟用了xmlrpc.php,請使用WordPress XML-RPC驗證服務。這將檢查您的站點並告訴您是否啟用了xmlrpc.php。

WordPress XML-RPC驗證服務
這是我在服務上檢查此站點時得到的結果。

XML-RPC檢查
這表明xmlrpc.php在www.dianjin123.com已被禁用。但是,如果您運行檢查並發現xmlrpc.php仍在您的站點上啟用,如何關閉它?
如何禁用xmlrpc.php
有三種禁用xmlrpc.php的方法:
通過插件禁用xmlrpc.php無插件禁用xmlrpc.php讓托管服務提供商禁用xmlrpc.php
讓我們分別看看每個。
如何使用插件禁用xmlrpc.php
安裝插件是禁用xmlrpc.php是最簡單的方法。插件地址https://wordpress.org/plugins/disable-xml-rpc/。使用方法如下。
這個插件使用非常簡單,簡單的無需說明,只需要啟用插件就可以。
如何無插件禁用xmlrpc.php
1、把下面的代碼
add_filter('xmlrpc_enabled','__return_false');放到functions.php文件中。
2、通過.htacess文件禁用xmlrpc.php
在您的.htaccess文件中,添加以下代碼:
<Files xmlrpc.php>OrderAllow,DenyDeny from all</Files>為避免遇到任何問題,請確保在此之前先備份舊文件。
讓您的托管服務提供商禁用xmlrpc.php
可以在服務器配置文件Nginx.config中,添加:
location~*^/xmlrpc.php$ {return403;}這將產生403錯誤。
根據自己的實際情況,選擇一種方法。
https://wordpress.org/plugins/disable-xml-rpc/
描述
Pretty simply, this plugin disables the XML-RPC API on a WordPress site running 3.5 or above.
很簡單,此插件在運行3.5或更高版本的WordPress網站上禁用XML-RPC API。
Beginning in 3.5, XML-RPC is enabled by default.
從3.5開始,默認情況下啟用XML-RPC。
Additionally, the option to disable/enable XML-RPC was removed.
此外,刪除了禁用/啟用XML-RPC的選項。
For various reasons, site owners may wish to disable this functionality.
由於各種原因,網站所有者可能希望禁用此功能。
This plugin provides an easy way to do so.
該插件提供了一種簡便的方法。
安裝步驟
Upload the disable-xml-rpc directory to the /wp-content/plugins/ directory in your WordPress installation
將disable-xml-rpc目錄上傳到WordPress安裝中的 / wp-content / plugins / 目錄
Activate the plugin through the ‘Plugins’ menu in WordPress
通過WordPress中的“插件”菜單激活插件
XML-RPC is now disabled!
XML-RPC現在已禁用!
To re-enable XML-RPC, just deactivate the plugin through the ‘Plugins’ menu.
要重新啟用XML-RPC,只需通過“插件”菜單停用該插件。
禁用xmlrpc.php的避免DDOS攻擊的幾種方法
那么我們如何可以禁用xmlrpc.php,從而阻止這些無效訪問呢?有以下幾種方法:
一、修改主題functions.php文件
1、在文件內添加以下代碼:
//禁用XML-RPC接口
add_filter('xmlrpc_enabled', '__return_false');
2、還可以用代碼轉向任意網址:
add_action('login_enqueue_scripts','login_protection'); function login_protection(){ if($_GET['root'] != 'zhuanxiang')header('Location: http://任意其他網站或者網站首頁/'); }
然后我們自己登錄時需要用:網站域名/wp-login.php?root=zhuanxiang,這個網址訪問后台。
3、只關閉XML-RPC的pingback 端口
如果你還是用使用第三方客戶端來管理Wordpress文章,那么可以只關閉XML-RPC的pingback 端口
//禁用XML-RPC的pingback接口 add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' ); function remove_xmlrpc_pingback_ping( $methods ) { unset( $methods['pingback.ping'] ); return $methods; }
以上代碼放到主題的functions.php文件即可。
或者設置-討論,前兩個去掉對勾
二、修改.htaccess文件
1、加入以下代碼:
# protect xmlrpc <Files xmlrpc.php> Order Deny,Allow Deny from all </Files>
或者
<Files xmlrpc.php> <IfModule mod_authz_core.c> Require all denied </IfModule> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> </Files>
2、還可以讓訪問轉向其他網址:
# protect xmlrpc <IfModule mod_alias.c> Redirect 301 /xmlrpc.php http://baidu.com </IfModule>
三、修改服務器配置
1、nginx配置禁止訪問該文件:
location ~* /xmlrpc.php {
deny all;
}
2、Apache配置禁止訪問該文件:
<IfModule mod_alias.c> Redirect 301 /xmlrpc.php http://baidu.com </IfModule>
通過以上幾種方法都可以實現禁止xmlrpc.php惡意訪問的目的
當你自己文章里調用了自己的某個文章鏈接時候wordpress會創建一個自我Pingbacks,這個東西沒有什么價值。可以禁用。
function no_self_ping( &$links ) { $home = get_option( 'home' ); foreach ( $links as $l => $link ) if ( 0 === strpos( $link, $home ) ) unset($links[$l]); } add_action( 'pre_ping', 'no_self_ping' );
寫入functions.php保存即可
修改的地方:
1.function.php
add_filter('pre_site_transient_update_core', create_function('$a', "return null;")); // 關閉核心提示 add_filter('pre_site_transient_update_plugins', create_function('$a', "return null;")); // 關閉插件提示 add_filter('pre_site_transient_update_themes', create_function('$a', "return null;")); // 關閉主題提示 remove_action('admin_init', '_maybe_update_core'); // 禁止 WordPress 檢查更新 remove_action('admin_init', '_maybe_update_plugins'); // 禁止 WordPress 更新插件 remove_action('admin_init', '_maybe_update_themes'); // 禁止 WordPress 更新主題 add_filter( 'xmlrpc_enabled', '__return_false' );//禁用了XML-RPC
2.設置-討論去掉
3.修改.htaccess
<Files xmlrpc.php> <IfModule mod_authz_core.c> Require all denied </IfModule> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> </Files>
4.安裝插件