怎么禁用xmlrpc.php


開發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.安裝插件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM