Flash哈希的安全性如何?用户是否可以轻松查看存储在其中的值并注入自己的值?
答案 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的默认值。
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:)