Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Як захистити форму входу від перебору паролів?

Обмежити кількість невдалих спроб - за ключем, що поєднує email та IP.

public function authenticate(): void
{
    $key = Str::transliterate(Str::lower($this->input('email'))) . '|' . $this->ip();

    if (RateLimiter::tooManyAttempts($key, 5)) {
        throw ValidationException::withMessages([
            'email' => __('auth.throttle', ['seconds' => RateLimiter::availableIn($key)]),
        ]);
    }

    if (! Auth::attempt($this->only('email', 'password'))) {
        RateLimiter::hit($key);
        throw ValidationException::withMessages(['email' => __('auth.failed')]);
    }

    RateLimiter::clear($key);
}

Чому саме такий ключ:

  • Лише IP - заблокує цілий офіс за NAT, а зловмисник із сотнею адрес обійде.
  • Лише email - будь-хто зможе заблокувати вхід чужому акаунту, просто вводячи неправильний пароль.
  • Email + IP гальмує перебір конкретного акаунта з конкретної адреси.

Що ще допомагає:

  • однакове повідомлення «Невірний email або пароль» - щоб не підказувати, які email зареєстровані;
  • не блокувати акаунт назавжди після N спроб - це інструмент для атаки на доступність;
  • двофакторна автентифікація, після якої перебір пароля сам по собі нічого не дає.

Стартові набори Laravel 13 вже обмежують спроби входу. Якщо застосунок за проксі (Cloudflare), перевірте довірені проксі - інакше всі запити матимуть IP проксі.

Докладніше в документації: Обмеження спроб входу

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання