ruby-on-rails - 我的 cookie token 是否足够强大,可以用于用户身份验证目的?

标签 ruby-on-rails ruby security ruby-on-rails-3 cookies

我正在运行 Ruby on Rails 3,我想知道我为用户身份验证设置 cookie 值所使用的代码是否足够强大。

在我的模型中我有:

require 'digest'

class User < ActiveRecord::Base
  ...

  def make_cookie_id_salt(string)
    secure_hash("#{self.id}--#{string}")
  end

  def secure_hash(string)
    Digest::SHA2.hexdigest(string)
  end
end

在我的 Controller 中我有:

cookies.signed[:current_user_id] = { :value => [@user.id, @user.make_cookie_id_salt(@user.id)], :expires => 15.days.from_now }

它够强吗?如果不是,我该如何改进(举个例子!)

最佳答案

放入 cookie 中的所有内容都以纯文本形式存储。

如果您设置了一个 cookie,然后在您的浏览器中检查 cookie,您会注意到(在您的情况下,cookie 名称将是 current_user_id)它由一串字符表示,例如:G8gcm9sbCB5b3VyIG93biBhdXRoIHRvIGt...(不是很清楚文本,对吗?它实际上是 Base64 编码的,但您可以轻松阅读它 - require('base64'); Base64.decode64(string)).

Rails 存储一个特殊的 _yourapp_session cookie,用于检查 cookie 的有效性。例如,如果某人/某事试图修改它,它将被拒绝。

现在,在您的情况下,您是否尝试对 cookie 中的某些内容进行哈希处理并不重要。 它仅用于身份验证(通过他的 ID 在数据库中查找用户)并且您没有存储任何唯一的 secret 数据(无论如何您都不应该将其放在 cookie 中,但这是散列某些东西的唯一原因)

当然有人可以窃取用户的 cookie(如果他使用公共(public)计算机并且没有清除他的缓存等)并登录,但是没有办法阻止这种情况(无论是哪种散列)用于混淆它)

总而言之,您应该对现有的一切感到满意。

关于ruby-on-rails - 我的 cookie token 是否足够强大,可以用于用户身份验证目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976159/

相关文章:

ruby-on-rails - 在控制台中使用两个应用程序

ruby-on-rails - 使用 Rails constantize inflector 调用命名空间类

ruby-on-rails - 在 Rails 版本 3.2.5 中使用 Action Mailer 发送电子邮件

php - 为什么 Laravel 的重置密码功能使用数据库,而电子邮件验证使用签名路由?

jquery - RoR 教程 Michael Hartl 删除微帖子也会删除用户

javascript - 在过滤器表单中重复时显示一个型号名称

ruby-on-rails - 如何修复 Rake 任务中的 "uninitialized constant"

mysql - 如何使订单仅适用于非空记录但获取所有记录?

java - 在首选项/属性文件中加密密码 - Java

python - PAM认证问题