Flash哈希的安全性如何?

时间:2011-01-05 13:36:07

标签: ruby-on-rails

Flash哈希的安全性如何?用户是否可以轻松查看存储在其中的值并注入自己的值?

3 个答案:

答案 0 :(得分:6)

默认情况下,Rails会将会话存储在cookie中。会话状态保存在一个哈希值中,该值为Marshal.dump',并且Base64.encode64'为一个字符串,以便在Set-Cookie标题中发送给浏览器。此外,会话使用Rails.application.config.secret_token加密签名,您可以在config/initializers/secret_token.rb找到该文件。

任何人都可以读取会话状态,包括flash哈希。但是不可能伪造它(除非攻击者拥有密钥)。但是,没有针对会话状态的重放攻击的保护(攻击者使用他之前见过的会话cookie,并且包含他想要发送给服务器的值)。

如果重播攻击有问题,或者用户读取会话状态的能力是一个问题,您应该使用AR会话存储,或者可能更好的想法,使用Redis会话商店。 Redis是一个快速键值存储,其特定用例与其他键值存储包括存储会话状态。

答案 1 :(得分:2)

FlashHash 已保存并加载到session["flash"]github)。所以它的安全性直接取决于会话存储设置。基于cookie的会话存储是Rails的默认值。

  • 在Rails 4中,根据您的config/secrets.yml,将适用以下内容:
    • 如果您只设置了secret_token,那么您的Cookie将被签名,但未加密
    • 如果您设置了secret_key_base,则您的Cookie 将被加密

即使您有加密的cookie和AR会话存储,也没有Redis会话存储,您总是会将session_id保存到客户端的cookie中,攻击者可以将其复制。在secure网站下设置https:// Cookie会使其更安全。

答案 2 :(得分:-1)

Rails使用编码会话,所以我倾向于拒绝。使用Firebug,向Rails应用程序发出请求并查看cookie:)