2009-10-27 5 views
3

Я думаю о создании системы входа для Ruby On Rails, так же, как это одинДолжен ли я ограничивать попытки входа в систему?

http://visionmasterdesigns.com/tutorial-create-a-login-system-in-ruby-on-rails/

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

Кроме того, основные этапы логинов кажутся:

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

Есть ли что-нибудь еще, что я должен учитывать?

ответ

8

Да, ограничение количества попыток входа на каждый IP-адрес (не на сеанс) повышает безопасность.

Знаете ли вы, что уже существует несколько систем аутентификации с Rails? Нет необходимости изобретать велосипед.
Вот неполный список.

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

Редактировать 2013
библиотеки приведенные выше, не до настоящего времени больше, и я не мог Recommand использовать их в новом приложении. Взгляните на devise.

+3

«За IP» является ключевым здесь. Без этого вы ввели тривиальную атаку отказа в обслуживании пользователей. –

+3

есть также devise: http://github.com/plataformatec/devise/ – Mike

+0

Ссылка на аутлогию неверна. Должно быть http://github.com/binarylogic/authlogic – Jim

0

Еще одно соображение должно быть атакой «Отказ в обслуживании». Ограничение количества запросов на динамические страницы по разумной ставке должно сделать это сложнее, чтобы злоумышленник мог удалить ваш сайт. Помогая справиться с проблемой взлома паролей, это также поможет предотвратить неправильное использование пользователями данных сайта, что может представлять угрозу безопасности (возможно, из-за повреждения данных).

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

1

Другой способ, которым вы могли бы это сделать, - это установить стойку. Вы можете отслеживать количество раз, когда IP-адрес посещает страницу входа в течение определенного времени, сохраняя попытки входа в базу данных, memcached, redis, кабинет tokyo и т. Д. Затем запретите пользователю доступ к странице, если они превысили набор квоту для определенного интервала времени.

Дамьен предложил Authlogic. Authlogic - моя любимая система аутентификации для Rails. Он очень всеобъемлющий и адаптируемый. Существует много существующих модулей для Authlogic, и я уверен, что вы могли бы использовать один из них для работы Authlogic.

2

Во-первых, ограничение скорости на странице входа на IP-адрес.Используйте страницу invisible captcha system на странице входа. Затем вы должны установить ограничения на доступ к каждому IP-адресу, но вы также должны установить ограничения для пользователей на пользователя в качестве последнего средства для остановки бот-сетей от принудительного принудительного извлечения нескольких IP-адресов. Отправьте электронное письмо пользователю, если обнаружена попытка перебора пароля. Не отправляйте полчища повторных сообщений электронной почты, если кто-то пытается из нескольких разных IP-адресов. Ботнет мог бы сделать серьезное спам в противном случае и, что еще хуже, вызвать важное сообщение в папке со спамом. Не забудьте упомянуть, что они могут захотеть изменить свой пароль и/или повысить его прочность.

Если вы включили лимиты входа в IP, сделайте лимиты высокими. Много мест используют три удара, и вы ушли. Это орехи и недружелюбие пользователя. Это должно быть не менее десяти или более реалистично, и когда вы нажмете на него, вы должны получить запрет, основанный на времени, а не запрет «Позвонить в службу поддержки клиентов». Никто не собирается перебирать пароль в десяти попытках. Поэтому я рекомендую лимит входа для каждого IP-адреса 10 и лимит входа для каждого пользователя в диапазоне от 1000 до 10 000 (достаточно высокий, чтобы помешать атакам типа «отказ в обслуживании»), но достаточно низкий, чтобы ботнет вряд ли взломал пароль еще) , У вас должна быть некоторая форма оповещения для пейджера sysadmin/on-call, на котором работает бот-сеть, которая срабатывает задолго до того, как вы нажмете этот порог. (Держите подсчет неудачных логинов для всех пользователей и отдельных пользователей, выполняйте скользящее среднее значение и предупреждайте, если он пересекает любой порог. Помните, что если у кого-то есть достаточно большой список пользователей, вероятность успеха для хотя бы одной учетной записи на всем протяжении база пользователей примерно такая же, как вероятность успеха, атакуя только одну учетную запись.)

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

Если у вас действительно есть время, чтобы сделать все это, у вас будет первоклассная форма входа. Я сомневаюсь, что вам это нужно.

Смежные вопросы