Автор: 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