Автор: Khilinski
2024-10-14
Защита от Brute-force атак на форму входа
Ограничение количества попыток входа. Этот код можно добавить в functions.php, чтобы ограничить количество неудачных попыток входа и блокировать IP на время.
function limit_login_attempts() {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_name = 'login_attempts_' . $ip;
// Получаем количество попыток входа для текущего IP
$attempts = get_transient($transient_name);
if ($attempts === false) {
// Если попыток ещё не было, устанавливаем в 1
$attempts = 1;
} else {
// Увеличиваем количество попыток
$attempts++;
}
// Если превышен лимит попыток (например, 5)
if ($attempts >= 5) {
$lockout_time = 30 * MINUTE_IN_SECONDS; // Блокируем на 30 минут
set_transient($transient_name, $attempts, $lockout_time);
wp_die('Превышено количество попыток входа. Попробуйте снова через 30 минут.');
} else {
// Обновляем количество попыток
set_transient($transient_name, $attempts, 30 * MINUTE_IN_SECONDS);
}
}
add_action('wp_login_failed', 'limit_login_attempts');
-
Что делает этот код?
- Ограничивает количество неудачных попыток входа (например, до 5 попыток).
- Блокирует возможность авторизации для IP-адреса на 30 минут после превышения лимита.
- Использует WordPress Transients API для временного хранения данных
Весь код находится в github