WordPress

移除 WordPress 忘記密碼查詢功能

移除 WordPress 忘記密碼查詢功能

一般形象網站更該關閉密碼查詢

在 WordPress 網站中,預設提供「忘記密碼」功能,讓使用者可以在忘記密碼時重新設置新密碼。然而某一些情況下,其實在沒有開放讓人註冊成會員的功能的話,通常是形象網站,更不太需要忘記密碼的查詢功能。加上如果管理者密碼本身複雜程度足夠,又有良好的資安電腦使用知識與習慣,關閉掉其實是更好的,避免有一些類似形象網站簡單內容的一直被機器人暴力 TRY 密碼。

步驟 1:移除忘記密碼的文字

首先,我們要移除登錄頁面上的「忘記密碼?」文字。這可以透過 gettext 過濾器來達成。以下是具體的程式碼:

function remove_lost_password_text( $text ) {
    // 英文文本
    if ( $text == 'Lost your password?' ) {
        $text = '';
    }
    // 中文文本
    if ( $text == '忘記密碼?' || $text == '忘記密碼?' ) {
        $text = '';
    }
    return $text;
}
add_filter( 'gettext', 'remove_lost_password_text' );

此程式碼會檢查登錄頁面上的文字,若為「Lost your password?」或「忘記密碼?」就將其替換為空字串,從而移除忘記密碼的文字顯示。會這樣做的原因在於有預設的英文語系的字串偵測與中文語系的繁中字串偵測,您可以依照需求去調整。

步驟 2:停用忘記密碼的 URL

接著,我們需要確保使用者無法透過 URL 來進行忘記密碼操作,通常這都是機器人主要在進攻的點。我們可以使用 login_init 動作鉤子來實現這一點。以下是具體的程式碼:

function disable_lost_password() {
    if ( isset($_GET['action']) && $_GET['action'] == 'lostpassword' ) {
        wp_redirect( wp_login_url() );
        exit;
    }
}
add_action('login_init','disable_lost_password');

此程式碼會在登錄初始化時檢查 URL 的參數,若發現有 action=lostpassword,就會將使用者重新導向回登入頁面,阻止忘記密碼操作,我是建議也可以導回首頁。

步驟 3:移除忘記密碼的頁面

有時候,僅移除文字還不夠,為了更徹底地防止使用者嘗試重置密碼,我們還可以進一步移除任何與忘記密碼相關的頁面顯示。這可以使用以下程式碼:

function remove_lostpassword_text ( $text ) {
    // 英文文本
    if ($text == 'Lost your password?') {
        $text = '';
    }
    // 中文文本
    if ($text == '忘記密碼?' || $text == '忘記密碼?') {
        $text = '';
    }
    return $text;
}
add_filter( 'gettext', 'remove_lostpassword_text' );
add_filter( 'ngettext', 'remove_lostpassword_text' );

這段程式碼與第一步類似,不過它還額外使用了 ngettext 過濾器來處理複數形式的文本。

步驟 4:完全停用忘記密碼功能

最後,為了完全停用忘記密碼功能,我們可以使用 allow_password_reset 過濾器來阻止所有密碼重設請求。以下是具體的程式碼:

function disable_password_reset() {
    return false;
}
add_filter ( 'allow_password_reset', 'disable_password_reset' );

這段程式碼直接返回 false,表示不允許進行密碼重設。

運作原理

上述所有程式碼可以透過 Code Snippet 或者修改佈景主題資料夾下的 functions.php 加入,就可以達成移除忘記密碼功能的目的。這種方式替換掉 WordPress 預設的功能,不需要依賴外掛更新,讓網站管理更具靈活性和安全性。

您必須自己斟酌一下必要性,不要弄到真的忘記無法登入的狀況,就要進資料庫修改了唷!或者….FTP 變更移除 Code Snippet 的外掛資料夾也可以暫時解開這個限制。