Анонимные пользователи в Rails - соображения безопасности?

Я смотрю на реализацию некоторой формы системы анонимного пользователя в Rails. Мне нужно позволить людям делать что-то (создавать записи, смотреть на то, что они создали и т. Д.), Фактически не создавая учетную запись. Как только они создают учетную запись, все сохраняется без риска потери ее путем очистки куки или чего-то еще.

Прямо сейчас я думаю, что это довольно просто. Иметь поле is_anonymous в модели User и использовать что-то подобное для доступа к текущему вошедшему в систему пользователю:

def find_user
  session[:user_id] ||= create_new_anonymous_user.id
end

Предполагая, что сеанс продолжается в течение некоторого разумного периода времени, а cookie сеанса не истекает, это должно поддерживать бесперебойную работу.

Однако есть часть меня, которая убеждена, что мне не хватает чего-то связанного с безопасностью. Кто-нибудь делал что-то подобное раньше? Я что-то упускаю сверхъестественное?

Спасибо!

4 ответа

Решение

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

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

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

Я только что нашел довольно крутой пример "пробных пользователей", использующих Authlogic: http://github.com/gisikw/authlogic_trial

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

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

Предполагая, что сеанс продолжается в течение некоторого разумного периода времени, а cookie сеанса не истекает, это должно поддерживать бесперебойную работу.

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

Другие вопросы по тегам