ruby-on-rails - 使用 Rails 存储加密的 cookie

标签 ruby-on-rails security cookies encryption

我需要在 Rails 的 cookie 中存储一小段数据(少于 10 个字符),并且我需要它是安全的。我不希望任何人能够读取该数据或注入(inject)他们自己的数据(因为这会使应用程序面临多种攻击)。我认为加密 cookie 的内容是可行的方法(我也应该签名吗?)。最好的方法是什么?

现在我正在这样做,这看起来很安全,但是对于那些比我更了解安全的人来说,许多事情看起来很安全,然后发现它并不真正安全。

我以这种方式保存 secret :

encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
cookies[:secret] = {
  :value => encryptor.encrypt(secret),
  :domain => "example.com",
  :secure => !(Rails.env.test? || Rails.env.development?)
}

然后我像这样读它:
encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
secret = encryptor.decrypt(cookies[:secret])

那安全吗?有什么更好的方法吗?

更新 :我知道 Rails 的 session 以及它的安全性,通过签署 cookie 和可选地存储 session 服务器端的内容,我确实将 session 用于它的用途。但我的问题是关于存储 cookie,这是我在 session 中不想要的一条信息,但我仍然需要它是安全的。

最佳答案

  • 设置安全 cookie
    cookies.signed[:secret] = {
     :value => "foo bar",
     :domain => "example.com",
     :secure => !(Rails.env.test? || Rails.env.development?)
    }
    
  • 访问 cookie
    cookies.signed[:secret] # returns "foo bar"
    

  • cookie 使用 ActionController::Base.cookie_verifier_secret 签名.您可以设置cookie_verifier_secret在初始化文件中。

    关于ruby-on-rails - 使用 Rails 存储加密的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364962/

    相关文章:

    ruby-on-rails - 具有父引用的 Mongoid 为空

    mysql - 将 Rails 置于现有数据库之上

    javascript - Time.now 在 View 中更新,无需刷新页面 (javascript)

    postgresql - 解决用户 postgres 启动进程分配 2405% CPU 的问题

    javascript - 将对象设置为 cookie

    asp.net-mvc - IE11 不发送 session cookie

    ruby-on-rails - 如何使用 strong_parameters 允许除 user_id 之外的所有属性?

    security - Windows 用户配置文件似乎阻止了 Web 服务调用上的证书身份验证

    php - 仅允许通过本地服务器上的 ajax 访问 PHP 文件

    java - Apache HttpClient 4.0.3 - 如何为 POST 请求设置带有 sessionID 的 cookie?