Как предотвратить принудительный вход на сайт — Laravel 5.7?

#php #laravel #laravel-5

#php #laravel #laravel-5

Вопрос:

У меня есть сайт Laravel и форма входа.

Мне интересно, есть ли способ деактивировать форму, когда вход пользователя не выполняется 5x раз.

Внутренняя логика

Я думал отслеживать loginFailCount базу по электронной почте в моей сессии, и если it == 5 , деактивировать кнопку отправки на 1 час.

Пример

  • электронная почта: john@doe.com
  • Количество файлов при входе: 5
  • Дата блокировки: 1523 (15:23 вечера)

Если текущее время 1623 , я включу кнопку входа для john@doe.com еще раз.

Я на правильном пути для мыслительного процесса?

Комментарии:

1. » Есть ли способ достичь этого через интерфейс Javascript? » если вы это сделаете, то было бы просто обойти это отключение. Помните, что клиентский код находится вне вашего контроля — если он у злоумышленника, он может просто отключить отключение. Кроме того, более чем вероятно, что они не будут атаковать форму , а напрямую создавать и отправлять запросы на сервер в обход интерфейса.

2. Да? Сохраняйте количество отправленных данных на стороне сервера. Действительно сделайте «блокировку» там, визуальную подсказку во внешнем интерфейсе по мере необходимости…

3. laravel.com/docs/5.8/authentication#login-throttling

4. @kyo не имеет значения, работает в обоих. laravel.com/docs/5.7/authentication#login-throttling

5. деактивация входа из-за неудачных попыток входа в систему является неэффективной практикой безопасности. Лучшим решением было бы добавить случайные секунды на ваш контроллер входа.

Ответ №1:

В зависимости от того, какую версию laravel вы используете, регулирование попытки входа в систему происходит «из коробки».

Документ Laravel — Регулирование входа в систему

В чем была бы выгода от отключения кнопки на интерфейсном / клиентском сайте?

Если кто-то пытается принудительно использовать ваше приложение, он явно обойдет отключенную кнопку отправки формы? Просто любопытно, почему бы не использовать подход только на стороне сервера.

Комментарии:

1. Спасибо за ваше предложение, я согласен с вами, вы высказали свою точку зрения, я еще немного подумаю над этим.

2. Я буду придерживаться серверной части и сделаю собственную проверку, поскольку я могу запретить ее на определенный номер и отправить собственное пользовательское сообщение.

3. @kyo вы можете сделать обе эти вещи, используя ThrottlesLogins функцию. Вы можете установить maxAttempts свойство для вашего LoginController класса, и вы можете установить сообщение в throttle значении вашего resources/lang/en/auth.php файла.

4. Я не вижу строки для этого.

5. Допустим, я хочу предотвратить попытку 5 раз и заблокировать на 1 час, как мне это сделать в Laravel 5.7?

Ответ №2:

Исходный код OWASP

Самый очевидный способ блокировать атаки методом перебора — это просто заблокировать учетные записи после определенного количества попыток ввода неправильного пароля. Блокировка учетных записей может длиться определенное время, например, один час, или учетные записи могут оставаться заблокированными до тех пор, пока администратор не разблокирует их вручную. Однако блокировка учетной записи не всегда является лучшим решением, потому что кто-то может легко злоупотребить мерами безопасности и заблокировать сотни учетных записей пользователей. На самом деле, некоторые веб-сайты подвергаются такому количеству атак, что не могут обеспечить соблюдение политики блокировки, поскольку они постоянно разблокируют учетные записи клиентов.

На том же сайте перечислены другие опции, подобные этой.

Как описано, блокировка учетной записи обычно не является практичным решением, но существуют другие приемы для борьбы с атаками методом перебора. Во-первых, поскольку успех атаки зависит от времени, простым решением является введение случайных пауз при проверке пароля. Добавление паузы даже на несколько секунд может значительно замедлить атаку методом перебора, но не будет беспокоить большинство законных пользователей при входе в свои учетные записи.

Доступно больше вариантов, которые вы можете попробовать в зависимости от вашего опыта и усилий.

Однако, если вы все еще просто хотите продолжить свое решение, @GetOffMyLawn указал на правильное решение в комментариях.