Cách hoạt động của đoạn mã
Code sử dụng transient API của WordPress để ghi lại số lần đăng nhập sai theo địa chỉ IP. Nếu vượt quá giới hạn (mặc định là 5 lần), người dùng sẽ bị tạm khóa đăng nhập trong khoảng thời gian nhất định (mặc định là 15 phút).
Đoạn code giới hạn đăng nhập sai
// Thêm vào file functions.php trong theme của bạn
function custom_limit_login_attempts($user, $username, $password) {
$ip = $_SERVER['REMOTE_ADDR'];
$key = 'failed_login_' . md5($ip);
$attempts = get_transient($key);
if ($attempts && $attempts['count'] >= 5) {
return new WP_Error('too_many_attempts', __('Bạn đã đăng nhập sai quá nhiều lần. Vui lòng thử lại sau 15 phút.'));
}
if (is_wp_error($user)) {
$count = isset($attempts['count']) ? $attempts['count'] + 1 : 1;
set_transient($key, ['count' => $count], 15 * MINUTE_IN_SECONDS);
} else {
delete_transient($key); // Xoá khi đăng nhập đúng
}
return $user;
}
add_filter('authenticate', 'custom_limit_login_attempts', 30, 3);
Tuỳ chỉnh nâng cao
- Thay đổi số lần sai: thay
5bằng số mong muốn ở dòng$attempts['count'] >= 5 - Thay đổi thời gian khoá: chỉnh
15 * MINUTE_IN_SECONDS(ví dụ:30 * 60cho 30 phút)
Lưu ý khi dùng
- Đây là giới hạn theo IP – nếu người dùng dùng IP động (mobile, 4G), có thể gặp phiền.
- Không nên áp dụng với trang web có đăng nhập công khai đông đảo (hãy dùng reCAPTCHA hoặc xác thực hai lớp).
- Chỉ áp dụng với giao diện đang kích hoạt – nếu bạn đổi theme, cần sao chép lại đoạn code.
Kết luận
Với vài dòng PHP đơn giản, bạn có thể bảo vệ website WordPress khỏi các cuộc tấn công brute-force mà không cần cài plugin. Đây là cách nhẹ nhàng, hiệu quả và lý tưởng cho các trang nhỏ hoặc tối ưu hiệu suất.
Bình luận