Анонимные пользователи в Rails - соображения безопасности? - PullRequest
7 голосов
/ 07 января 2009

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

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

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

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

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

Спасибо!

Ответы [ 4 ]

4 голосов
/ 10 января 2009

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

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

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

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

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

0 голосов
/ 10 января 2009

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

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

0 голосов
/ 07 января 2009

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

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

...