Достаточно ли Google reCAPTCHA для предотвращения атак с применением грубой силы?

#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, но не всегда, это зависит от того, как вы создали свой пакет).