Home Solution Tips Hạn chế nỗ lực đăng nhập trong WordPress không dùng Plugin
Hạn chế nỗ lực đăng nhập trong WordPress không dùng Plugin

Hạn chế nỗ lực đăng nhập trong WordPress không dùng Plugin

by CoomDream
75 views

Trong hướng dẫn này, chúng ta sẽ xem cách hạn chế các lần thử đăng nhập trong WordPress. Bằng cách giới hạn số lần đăng nhập không hợp lệ, chúng ta có thể bảo vệ một trang web khỏi cuộc tấn công DOs. Tránh được các công cụ tự động cố gắng nhập Admin và Pass để hack web của bạn.

Không thiếu người dùng độc hại (láo) trực tuyến và không có nghi ngờ gì về điều đó. Chúng ta chỉ có thể bảo vệ trang web của mình khỏi bị hack bằng cách bảo mật tối đa nó. Vì vậy, điều quan trọng là phải thực hiện các bước để ngăn chặn các lượt cố gắng truy cập độc hại để bảo vệ trang web của chính mình.

Có rất nhiều cách để bảo mật trang web WordPress của mình. Hôm nay OkeABC chỉ nói đến cách bảo mật đơn giản mà hiệu quả nhất đó là hạn chế các nỗ lực đăng nhập trong WordPress (limit login attempts).

hai cách để hạn chế các nỗ lực đăng nhập vào trang web của bạn

  • Sử dụng các Plugin hạn chế đăng nhập trong kho Plugin của WordPress;
  • Sử dụng một đoạn code tùy chỉnh vào tệp functions.php của bạn.

Với việc sử dụng thêm một Plugin chỉ để hạn chế các nỗ lực đăng nhập thì chẳng khác gì “giết gà dùng dao mổ khủng long” :v . Bạn là người dùng mã nguồn mở WordPress làm web thì bạn cũng đã biết: Dùng nhiều Plugin sẽ làm cho trang của bạn chậm chạp đi => mất khách truy cập. Vì vậy OkeABC không khuyến khích bạn cài các Plugin. Bạn chỉ nên cài khi thực sự cần.

1. Thêm mã tùy chỉnh để hạn chế các nỗ lực đăng nhập trong WordPress

Phần này cho thấy cách hạn chế các lần thử đăng nhập bằng cách sử dụng mã tùy chỉnh trong functions.php. Đây là tệp chủ đề WordPress chứa các hàm để lọc và thực hiện các hành động đối với thực thể WordPress.

Bằng cách thực thi mã riêng của OkeABC đặt ra quy tắc ngăn chặn hành động cố gắng đăng nhập nhiều lần vào WordPress. Nó sẽ giảm tải bằng cách tránh sử dụng plugin. Nó sẽ tối ưu hóa rất nhiều trang web WordPress của bạn bằng cách giảm được một plugin không cần thiết.

Thêm mã dưới đây vào các hàm WordPress của bạn. Mã này chứa quy tắc hành động và bộ lọc WordPress và chức năng gọi lại tương ứng. Cuộc gọi lại chứa mã để hạn chế số lần thử đăng nhập không hợp lệ.

Nếu chủ đề (theme) của bạn có Child Theme thì thêm mã dưới vào functions.php của Child Theme. Nếu không bạn thêm thẳng vào cuối functions.php của chủ đề chính cũng ok.

OkeABC khuyến khích bạn dùng chủ đề có Child Theme hoặc tự tạo nó. Vì khi chỉnh sủa Child Theme thì khi cập nhập chủ đề lên phiên bản mới sẽ không bị mất đi cài đặt của bạn. Nếu bạn không có Child Theme mà chỉnh sửa thẳng vào chủ đề chính. Khi đó nếu chủ đề của bạn có bản cập nhật mới, bạn tiến hành cập nhật thì sẽ mất các mã tùy chỉnh bạn đã thêm vào.

Ok. Sau đây là mã “thần thánh” giúp hạn chế các nỗ lực đăng nhập thay thế cho Plugin. Bạn cứ thế dùng không phải chỉnh sửa gì thêm nhé.

function check_attempted_login( $user, $username, $password ) {
    if ( get_transient( 'attempted_login' ) ) {
        $datas = get_transient( 'attempted_login' );

        if ( $datas['tried'] >= 3 ) {
            $until = get_option( '_transient_timeout_' . 'attempted_login' );
            $time = time_to_go( $until );

            return new WP_Error( 'too_many_tried',  sprintf( __( '<strong>ERROR</strong>: You have reached authentication limit, you will be able to try again in %1$s.' ) , $time ) );
        }
    }

    return $user;
}
add_filter( 'authenticate', 'check_attempted_login', 30, 3 ); 
function login_failed( $username ) {
    if ( get_transient( 'attempted_login' ) ) {
        $datas = get_transient( 'attempted_login' );
        $datas['tried']++;

        if ( $datas['tried'] <= 3 )
            set_transient( 'attempted_login', $datas , 300 );
    } else {
        $datas = array(
            'tried'     => 1
        );
        set_transient( 'attempted_login', $datas , 300 );
    }
}
add_action( 'wp_login_failed', 'login_failed', 10, 1 ); 

function time_to_go($timestamp)
{

    // converting the mysql timestamp to php time
    $periods = array(
        "second",
        "minute",
        "hour",
        "day",
        "week",
        "month",
        "year"
    );
    $lengths = array(
        "60",
        "60",
        "24",
        "7",
        "4.35",
        "12"
    );
    $current_timestamp = time();
    $difference = abs($current_timestamp - $timestamp);
    for ($i = 0; $difference >= $lengths[$i] && $i < count($lengths) - 1; $i ++) {
        $difference /= $lengths[$i];
    }
    $difference = round($difference);
    if (isset($difference)) {
        if ($difference != 1)
            $periods[$i] .= "s";
            $output = "$difference $periods[$i]";
            return $output;
    }
}

Trong đoạn mã trên, OkeABC đã sử dụng thẻ hành động wp_login_fails và  authenticate filter tag để móc các hàm để lấy và đặt transed_login  thoáng qua. Số lần thử thất bại được lưu trữ tạm thời và được sử dụng để cảnh báo người dùng về nó khi đạt đến giới hạn.

Ảnh chụp màn hình bên dưới hiển thị bảng đăng nhập WordPress với thông báo lỗi cho biết thông tin đăng nhập bị chặn. Điều này sẽ được hiển thị sau các nỗ lực đăng nhập thất bại liên tục. 

Cảnh báo đăng nhập thất bại và bị chặn đăng nhập trong 5 phút
Cảnh báo đăng nhập thất bại và bị chặn đăng nhập trong 5 phút

Chú ý: Nếu bạn đang dùng các Plugin hỗ trợ hạn chế đăng nhập liên tục thì tắt nó đi. Xóa cache trình duyệt rồi thử đăng nhập sai admin hoặc pass để thấy hiệu quả nhé.

2. Sử dụng các Plugin hỗ trợ hạn chế các lần đăng nhập thất bại liên tiếp

Ở đây OkeABC sẽ chỉ liệt kê tên các Plugin, còn việc cài đặt thì quá easy rồi. Chỉ cần tìm đúng tên Plugin rồi cài đặt sau đó nhấn kích hoạt lên thôi. Không phải chỉnh sửa gì thêm.

  1. WP Limit Login Attempts
  2. Loginizer By Raj Kothari
  3. DWP Loginizer By Demos Palana

Và còn rất nhiều các Plugin khác nữa không thể kể hết.

Trong hướng dẫn này, OkeABC đã nêu cách hạn chế các lần thử đăng nhập trong WordPress. Giới hạn số lần đăng nhập không hợp lệ mà không dùng Plugin. Bằng cách thêm mã tùy chỉnh vào functions.php của Child Theme.

Nếu bạn cũng muốn biết thêm về cách bảo mật WordPress thì đọc bài viết Bảo mật WordPress trong một vài bước đơn giản.

Chúc bạn thành công!.

Related Posts

Leave a Comment