JackShcherbakov
@JackShcherbakov

Как бороться с брутфорсом?

Здравствуйте!

Допустим есть форма входа на сайте. Как сделать защиту от брута лучше?

Я подумал и решил сделать такой вариант:

1) Запоминаем IP юзера
2) После 3-х неверных попыток делаем задержку для входа с этого IP в 30 сек
4) После последующих попыток задержка удваивается
5) Пользователю присылаем уведомление о попытке входа в его аккаунт

Обратите внимание, что задержка активируется именно для этого IP. То есть если злоумышленник пытается подобрать пароль - у него ничего не получится, т.к будут бешеные задержки. В то же время владелец аккаунта спокойно сможет зайти в аккаунт и увидеть, что кто-то пытался войти в аккаунт.

Нормальный вариант? Как думаете? Есть ли способы лучше?

Конечно, в идеале это вход по SMS, но этот вариант пока не рассматривается.

Заранее выражаю огромную благодарность всем, кто поможет!
  • Вопрос задан
  • 774 просмотра
Пригласить эксперта
Ответы на вопрос 13
@Sandboxser
Что ты придумываешь велосипед ?
Поставь капчу и всё
Ответ написан
Все очень зависит от того, что за сервис вы разрабатываете, как и кем он будет использоваться и что в нем есть интересного для брутфорсера. Пока ваш сервис не имеет большой пользовательской базы и не особо интересен атакующим и его брутят только стандартные боты-краулеры которые ищут доски объявлений, будет работать все что угодно, в том числе и простые рейтлимиты, как вы предлагаете и капчи. Если у вас популярный сервис с большой и разнообразной пользовательской базой, то окажется что с одного IP могут ходить и хорошие пользователи и плохие, помимо прямого брута (по паролю) бывает обратный (с одним паролем по разным пользователям), что пользователи очень не любят капчи (а иногда и физически не имеют возможности их ввести, например из-за плохого зрения или дальтонизма) и т.д. В таких случаях защита от брутфорса требует более интеллектуальных подходов и вряд ли вам о деталях их реализации кто-то подробно расскажет.
Ответ написан
Stalker_RED
@Stalker_RED
Добавьте в форму csrf токен, чобы ограничить xss и нельзя было просто спамить post-запросами не получив заранее форму.

Помимо задержки можно еще и капчу показывать.

Задержка 30 секунд с самого старта - немножко перебор, т.к. три ошибки не сложно и руками сделать (не та раскладка, капслок). Я бы начал с десяти, например.

Счетчик попыток не только для ip но и для логина, потому что могут брутить целевого юзера с разных ip.

А вообще да, вы повторно изобретаете то, что уже давно существует и на уровне методологии и в виде программных продуктов.
Ответ написан
@rogiivs
зачем тебе давать 30 сек передержки? просто отправляй письмо восстановления на почту и все, с предупреждением тип, если это были не вы поменяйте пароль на более сложный. Или просто создай статистику сессий на сайте для юзеров. и выдавай токен при каждой авторизации.
Ответ написан
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
fail2ban
Ответ написан
@MoksS
Как вариант, если у тебя регистрация по почте, то после нескольких неудачных попыток входа на сайт, отправлять пользователю уведомление на почту, дальше заморозка аккаунта/смена пароля, либо просто ссылка для того, чтобы пользователь снова смог авторизоваться и дать новые куки/токен. Люди предлагали выше поставить капчу, даже если и обходится, все равно будет лишний барьер, и не каждый захочет с ним бороться и тратить на него время.
Ответ написан
@alexstup
Оркестр
Сделайте брутфорс для атакующего дорогим и не выгодным. Например, вычисляйте что-то хитрое в течении пары секунд на javascript и используйте в форме ввода.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Обратите внимание, что задержка активируется именно для этого IP. То есть если злоумышленник пытается подобрать пароль - у него ничего не получится, т.к будут бешеные задержки. В то же время владелец аккаунта спокойно сможет зайти в аккаунт и увидеть, что кто-то пытался войти в аккаунт.
Современные боты сканят с достаточно большого диапазона адресов (например ботсеть) и соответственно в логах будет всего по одному отлупу…
Ответ написан
Yevhen89
@Yevhen89
Front-end developer, учусь активно)
как вариант, если от взламывающих приложений, можешь поставить input type="hidden", реальный пользователь не увидит этого поля, а вот приложение будет туда писать, и если там что то есть, то сразу блокировать его, это как еще один вариант от взломов
Ответ написан
Jump
@Jump
Системный администратор со стажем.
Нормальный вариант? Как думаете? Есть ли способы лучше?
Да. Это общепринятый стандартный вариант который решает данную задачу.
Минус этого способа в том что блокируется IP а это может быть выходной шлюз крупного провайдера с которого ходят тысячи пользователей.

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

Можно вести статистику по IP и если с него много попыток авторизации, но ни одной успешной - в бан его на некоторое время. Собственно fail2ban похоже работает.
Ответ написан
iamd34d
@iamd34d
Предлагаю сделать статистику сессий как писали выше, чтобы человек видел кто где с какого IP заходил в аккаунт. Кнопка "завершить все сессии кроме текущей". И капча. Мне кажется, этого будет более-менее достаточно. А там уж посмотрите. Но вещь полезная.
Ответ написан
Определитесь с зонами ответственности.
Админка одно, а публичный доступ другое.
Определитесь с требованиями к паролю и ограничьте доступ к админке только с определённых IP.

Далее чётко дайте знать пользователю, что его пароль - это его ответственность.

Добавьте двух факторную авторизацию.

Если начинают ломать, то брутфорс - это только один из подходов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы