客戶的資安廠商說我們的 WordPress 有使用者帳號列舉的潛在風險

什麼是「使用者帳號列舉」

常見的使用者帳號列舉方法:

登入介面的錯誤訊息:

  • 不同錯誤訊息:如果系統在輸入不存在的帳號和存在但密碼錯誤的帳號時,回應的錯誤訊息不同,攻擊者可以根據這些訊息來判斷帳號是否存在。

  • 相同錯誤訊息:即使系統在兩種情況下給出相同的錯誤訊息,攻擊者仍可透過分析回應時間的差異來推測帳號是否存在。

  • 密碼重設功能:當攻擊者輸入一個電子郵件地址或帳號名進行密碼重設,如果系統回應該帳號不存在,攻擊者就能確定該帳號是無效的。

  • 註冊功能:在某些註冊過程中,如果系統提示某個電子郵件或帳號名已經被使用,這就洩露了帳號已存在的信息。

如何在 WordPress 中自訂統一錯誤訊息?

// Add this function to your theme's functions.php file or a custom plugin
function custom_invalid_username_error_message( $errors, $redirect_to ) {
    // Check if the error code 'invalid_username' is present
    if ( isset( $errors->errors['invalid_username'] ) ) {
        // Customize the error message
        $errors->errors['invalid_username'][0] = 'User credentials doesn\'t match the existing ones!';
    }

    if ( isset($errors->errors['incorrect_password'])) {
        $errors->errors['incorrect_password'][0] = 'User credentials doesn\'t match the existing ones!';
    }

    return $errors;
}
add_filter( 'wp_login_errors', 'custom_invalid_username_error_message', 10, 2 );