Rails中的匿名用户——安全注意事项?

7

我正在考虑在Rails中实现某种匿名用户系统。我需要让人们做一些事情(创建记录,查看他们所创建的内容等),而不需要创建帐户。一旦他们创建了帐户,所有内容都会持久存在,不会因为清除cookie或其他原因而丢失。

目前,我认为这很简单。在User模型中有一个is_anonymous字段,并使用以下代码访问当前登录的用户:

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

假设会话持续一段合理的时间,并且会话cookie没有过期,那么应该可以保持一切运行顺畅。然而,有一部分我认为我可能遗漏了某些与安全相关的内容。有人之前做过类似的事情吗?我是否遗漏了某些非常明显的东西?谢谢!
4个回答

4
唯一真正的安全问题是这些匿名用户是否可以执行关键操作。
你的系统意味着任何拥有特定cookie的人都可以进入该网站。根据用户提供的信息类型,情况可能不会太糟糕,但也可能非常严重。
我过去做过类似的事情(在我的情况下,我正在跟踪用户在网站上的进度,当用户登录或注册时,我将“访客”数据附加到他们的帐户中)。当你进行切换时,请确保删除匿名记录以防止进一步访问,这样就可以解决问题了。

2

链接似乎失效了.. 你知道这个是否已经被移动了吗? - Blake

0
假设会话持续一段合理的时间,并且会话cookie没有过期,那么应该可以保持一切运行顺畅。
也许你应该为新用户设置一个单独的长期cookie,这样他们就可以在同一浏览器中拥有多个会话。

0

你确定要让人们创建与可能不存在的账户相关联的对象吗?不幸的是,我不太了解你的应用程序实际在做什么,但我认为走这条路可能会让你拥有一堆孤立的对象,这些对象并不真正属于任何真实用户。

如果你真的想这样做,我认为你所拥有的东西还不错。你可以创建一个真正的用户,标记为“guest”(或其他),一旦用户想要真正注册,他们就会被提示输入其他信息并取消标记。你应该添加访客与非访客等访问控制。


好的,意图是在最后一次访问n天后删除所有匿名账户及其相关记录,其中n为会话cookie过期前的天数。我希望尽可能地降低使用门槛。 - Tim Sullivan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接