1

我目前正在学习http://ruby.railstutorial.org/chapters/上的 Rails 教程

在第 7-8 章的某个地方,我在部署到 Heroku 时遇到了一个错误(不幸的是我忘记了这个错误),但我发现在线解决方案是让 remember_token 变量在用户模型中可访问。我不确定该解决方案是否合法,但它有效,所以我继续本教程没有问题。

remember_token 是一个变量,定义如下:

self.remember_token = SecureRandom.urlsafe_base64

换句话说,它是一个随机的字符串,所以它本身是非常安全的。即没有人能猜到。

它与 cookie 一起使用,以确定是否有人以前登录过:

def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
end

def signed_in?
    !current_user.nil?
end

def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
end

但是我的用户模型具有以下内容:

attr_accessible :email, :name, :password, :password_confirmation, :remember_token

...而且我想知道这个 remember_token 作为可访问属性是否会是一个安全漏洞。理论上有人可以使用客户端命令行并使用类似的东西获取remember_tokenuser.remember_token吗?一旦他们拥有了remember_token,他们就不能只是模拟以前登录的状态,因此不需要密码/电子邮件组合吗?请有更多经验的人对此有所了解吗?

谢谢!

4

1 回答 1

2

attr_accessible 使列可通过批量分配进行更新。

因此,在 remember_token 上允许它意味着理论上他们可以为 user#update 破解一个新的 POST 表单,并将其设置为他们通过表单传递的任何内容。

但是,我认为您的建议是不可能的。有人可以使用什么样的控制台来让用户访问您的模型?

要获得这种访问权限,他们必须在您的服务器上运行控制台,在 Rails 根目录中......这不太可能。

一个人不太可能访问另一个用户的 remember_token,除非您通过控制器操作让其他用户访问其他用户(即不是他们自己的用户)的详细信息。允许访问用户自己的 remember_token 无关紧要——他们已经拥有它。

于 2013-02-18T03:43:35.490 回答