Можно ли использовать Laravel’s Аутентификация пользователя с условиями предотвратить атаки грубой силы?
это ответ для PHP, предлагает добавить две колонки в вашу базу данных (TimeOfLastFailedLogin
а также NumberOfFailedAttempts
), а затем проверять эти значения при каждой попытке входа в систему.
Вот синтаксис Laravel для аутентификации пользователя с условиями:
if (Auth::attempt(array('email' => $email, 'password' => $password, 'active' => 1)))
{
// The user is active, not suspended, and exists.
}
Есть ли способ использовать параметры условия для проверки количества попыток за указанный период времени? Например, менее 3 запросов за последние 60 секунд.
Я знаю, что это старый вопрос, но, поскольку он занимает хорошие позиции в Google, я хотел бы пояснить, что черта ThrottlesLogins существует со времен Laravel 5.1 и предотвращает атаки методом перебора.
Он включен в Auth \ LoginController по умолчанию через черту AuthenticatesUser.
Docs: https://laravel.com/docs/5.6/authentication#login-throttling
Пример поведения по умолчанию (см. Метод «login»): https://github.com/laravel/framework/blob/5.6/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php
Так что если вы используете loginController по умолчанию, который поставляется с Laravel, то обработка регулирования входа в систему будет выполняться автоматически.
Вы можете создать что-то такое же простое, как класс ниже, чтобы предотвратить это:
class Login {
public function attempt($credentials)
{
if ( ! $user = User::where('email' => $credentials['email'])->first())
{
//throw new Exception user not found
}
$user->login_attempts++;
if ($user->login_attempts > 2)
{
if (Carbon::now()->diffInSeconds($user->last_login_attempt) < 60)
{
//trow new Exception to wait a while
}
$user->login_attempts = 0;
}
if ( ! Auth::attempt($credentials))
{
$user->last_login_attempt = Carbon::now();
$user->save();
//trow new Exception wrong password
}
$user->login_attempts = 0;
$user->save();
return true;
}
}
Или вы можете пойти с пакетом, как караул, который контролирует дросселирование для вас. Sentry с открытым исходным кодом.