я должен ограничить попытки входа в рельсы? - PullRequest
4 голосов
/ 27 октября 2009

Я думаю о создании системы входа в систему для Ruby on Rails, очень похожей на эту

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

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

Кроме того, основные шаги входа в систему выглядят так:

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

Есть ли что-то еще, что я должен рассмотреть?

Ответы [ 4 ]

8 голосов
/ 27 октября 2009

Да, ограничение количества попыток входа в систему на ip (не на сеанс) повышает безопасность.

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

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

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

2 голосов
/ 28 октября 2009

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

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

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

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

1 голос
/ 28 октября 2009

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

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

0 голосов
/ 27 октября 2009

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

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

...