#java #spring #spring-security #recaptcha #brute-force
Вопрос:
В моем Java-приложении (с загрузкой Spring) Я внедрил Google reCAPTCHA v3 и теперь пытаюсь внедрить такой механизм, чтобы предотвратить атаки методом перебора на форму входа в систему. Я хочу реализовать реализацию, как упоминалось в разделе Защита от грубой силы Spring Security, проверив недопустимые попытки входа в систему, а затем отключив учетную запись на некоторое время после 3 неудачных попыток входа в систему.
Однако, просматривая другие возможные сценарии или механизмы, я увидел, что Google reCAPTCHA также может быть полезен для этой цели. Но я не уверен, что дополнительная реализация (помимо Google reCAPTCHA) полезна для предотвращения атак грубой силы.
Итак, достаточно ли повторения Google или мне нужна дополнительная реализация, как упоминалось в разделе Защита от грубой силы Spring Security. Есть идеи?
Ответ №1:
Все, что делает КАПЧА, — это пытается доказать, что ваш пользователь-человек. reCAPTCHA от Google-хорошее начало для обеспечения безопасности на стороне клиента, но на самом деле вы хотите использовать несколько форм защиты.
Это может включать в себя отключение учетной записи, как вы ее описываете, ограничение количества запросов на вход в течение определенного периода и IP-адреса или требование отправки электронного письма для авторизации нераспознанного входа. Это в значительной степени дизайнерское решение с вашей стороны.
У Баельдунга есть хорошая статья о предотвращении атак методом перебора с использованием Spring Security, в которой приведен работоспособный пример блокировки IP-адресов в зависимости от количества попыток.
Комментарии:
1. Большое спасибо за это хорошее объяснение, проголосовали. Я обязательно последую одной из подходящих статей о Белдунге. Но мне интересно, дает ли статья, которую вы упомянули, также возможность отслеживать пользователя по имени пользователя, а не по ip? Потому что блокировка ip-адреса может быть не очень хорошей идеей, если есть несколько пользователей из одной компании, поскольку у них одинаковые ip-адреса. Я прав?
2. @Rosa вы могли бы просто изменить метод
loadUserByUsername
, чтобы делать то, что вам нужно. Вы правы в том, что IP-адреса могут быть общими. Это особенно верно и для мобильных сетей.3. Я хотел реализовать предложенную вами страницу, и я был именно в этом месте и просто добавил
if (loginAttemptService.isBlocked(ip)) {}
блок иgetClientIP
метод. Однако я не уверен, как добавитьorg.springframework.web.context.request.RequestContextListener
в свой maven, потому что в репозитории Maven нет его библиотеки. Есть идеи?4. @см.при импорте пакета «spring-контекст» с помощью maven (обычно он входит в комплект spring boot, но не всегда, это зависит от того, как вы создали свой пакет).