我读过一堆东西,说在 Rails 应用程序中使用 cookie 存储的一个缺点是客户端可以看到 cookie 数据。但是,我查看了 cookie 数据,它是加密的。解密cookie数据相对容易吗?
3 回答
Rails 中的默认 cookie 存储没有加密,它是 Base64 编码的。Base64 编码只是一种用 ASCII 表示二进制数据的方法,不应将其视为“加密”。任何人都可以解码它。
使用您在 config.rb 文件中设置的以下信息对存储的会话数据进行签名。
Rails::Initializer.run do |config|
config.action_controller.session = {
:session_key => '_store_session',
:secret => '851939c37d94574e284ded8437d4ea3447dae24cc5bda61d8eaf2731d49273bc4c620'
}
end
因此,虽然它不容易阅读,但只要有足够的时间和精力,它也不是不可能的。
这是一堆详细讨论此问题的链接,但普遍的共识是,这不是一个有缺陷的实现,并且您不应该在会话中存储任何过于关键的内容。
- http://blog.thinkrelevance.com/2008/1/27/rails-the-cookie-store-and-security
- http://railscasts.com/episodes/84-cookie-based-session-store
- http://www.caboo.se/articles/2007/2/21/new-controversial-default-rails-session-storage-cookies
- http://www.technicalinfo.net/papers/WebBasedSessionManagement.html
- http://www.quarkruby.com/2007/9/20/ruby-on-rails-security-guide#sessions
值得知道的是,rails < 1.2.6 存在会话固定漏洞,可以轻松窃取他人的 ID/会话
Rails 1.2.4 发行说明 http://weblog.rubyonrails.org/2007/10/5/rails-1-2-4-maintenance-release
Rails 1.2.6 发行说明 http://weblog.rubyonrails.org/2007/11/24/ruby-on-rails-1-2-6-security-and-maintenance-release
CVE-2007-5380 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-5380
CVE-2007-6077 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6077