Лучший способ заблокировать повторные запросы на вход без базы данных?

StackOverflow https://stackoverflow.com/questions/1001963

  •  05-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать улучшенную функцию сброса пароля для одного из наших общедоступных веб-сайтов, и в дополнение к лучшей капче я хотел пометить имя пользователя, которое пытается войти в систему безуспешно x раз за менее чем y минут , Первой мыслью было создание базы данных, в которой регистрируются все попытки, а затем после максимального количества попыток за время - мы просто блокируем учетную запись до получения телефонного звонка от менеджера сотрудника для ее сброса.

Что является лучшим подходом, который не требует постоянства через SQL. (Cookie / что-то еще?) Если кто-то не существует, как я могу сделать это с более чистым подходом? почему-то мой мозг сегодня полон

Это было полезно?

Решение

Проверьте этот ответ о том, как их душить.
Регулирование попыток входа в систему

У Джеффа Этвуда есть интересная запись в блоге на эту тему, если вам интересно.
http://www.codinghorror.com/blog/archives/001206.html

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

Другие советы

Использование файлов cookie или сеансов было бы вредным, поскольку пользователь мог очистить свои попытки входа в систему, просто очистив файлы cookie. Возможно, было бы целесообразно использовать файл во временном каталоге для хранения попыток входа в систему?

Что ж, cookie не полезен против злоумышленника (он просто удалит cookie или просто не отправит его вам). Если у вас есть состояние приложения в памяти, вы можете использовать его, но вы должны быть очень осторожны, так как это может привести к тому, что вы действительно быстро заполняете свою память, помимо проблем с масштабируемостью из-за параллелизма и замок. И даже это может не работать в приложении, работающем на многих разных серверах, так как это состояние приложения, вероятно, не распределяется между этими серверами. Как вы думаете, почему хранение данных в базе данных является плохой идеей?

Вы можете использовать базу данных, использовать memcache и настроить задание cron для периодического вывода таблицы. Вы также можете использовать куки или переменные сеанса, но я бы не стал полагаться на них по соображениям безопасности.

Помните, что целью взломщика может быть не получение доступа к вашей системе, а сделать ее непригодной для всех. Возможно, он мог бы добиться этого, добровольно войдя в систему с ложными учетными данными, чтобы заблокировать определенных пользователей на вашем сайте! Я думаю, что вы не найдете адекватного решения без базы данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top