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

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

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


person Toran Billups    schedule 16.06.2009    source источник


Ответы (5)


Проверьте этот ответ об их ограничении.
Ограничение попыток входа в систему

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

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

person Robert Greiner    schedule 16.06.2009

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

person Eric Petroelje    schedule 16.06.2009

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

person Yuliy    schedule 16.06.2009
comment
Я не думаю, что хранить эти данные в SQL плохо, я просто хотел избежать добавления базы данных ... но если потребуется (как кажется) - тогда я найду время, чтобы сделать это правильно - person Toran Billups; 16.06.2009

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

person Jason Rikard    schedule 16.06.2009

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

person merkuro    schedule 16.06.2009