Rack::Session::Cookie警告没有提供秘密选项?

111

我正在Fedora 17下运行Rails 3.2.3和Ruby 1.9。 当我运行rails s时,我收到此警告,该如何解决?

安全警告:Rack::Session::Cookie未提供任何秘密选项。 这会带来安全威胁。强烈建议您提供一个密钥,以防范可能来自伪造cookie的攻击。这将不受Rack的未来版本支持,未来版本甚至会使您现有的用户cookie失效。


1
在config/initializers/secret_token.rb中设置了一个值吗? - Kashyap
我在将Rails从3.2.9升级到3.2.10后收到了相同的警告。 - AlexD
2
实际上,这个警告是在Rack 1.4.2中添加的,该版本于昨天(2013年1月6日)发布在rubygems.org上,但实际提交是在2012年3月18日完成的。 - AlexD
如果你无法运行guard+spork+rspec,请降级。 - lulalala
@Marlin 我改变了标记 - 仍然应该有一些RoR 3.1的解决方案.. 或许可以把它作为另一个问题提出来? - Yo Ludke
显示剩余3条评论
7个回答

86

4
请将您的Rails Gems更新,因为此项更改已经被移植到所有支持的Rails Gems中。注意@henrik-n。 - shadowbq

20

根据tehgeekmeisters的回答讨论,这个警告弹出来是因为Rails在使用Rack cookies的方式与预期不同。现在可以暂时忽略这个警告,直到就如何处理这个问题达成最终协议并实施修复。


17

1
请注意,3.2.11比3.2.2更新(因为它是11而不是1.1)。因此,只需升级Rails可能就可以解决您的问题。 - Henrik N
是的,由于某种原因,我陷入了十进制符号的思维定势中,认为3.2.2和3.2.20是相同的。曾经有一瞬间我以为自己处于最前沿! - Dreyfuzz

16

rails 3.2.9 - ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]

大家好,以下方法适用于我,也许适用于你。


/usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.9/lib/action_dispatch/middleware/session/abstract_store.rb
module Compatibility
          def initialize(app, options = {})
            options[:key]     ||= '_session_id'
            #fixed warning - SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
            options[:secret] ||= Rails.application.config.secret_token
            super
          end
    end

2
这是最少“赞”的答案,但它是唯一一个真正解决问题且不会降级或兼容性问题的答案。它只是清除了令人烦恼的消息。 - Aleks
1
不太想修补Rails代码。我认为最好在发布中解决这个问题。升级到3.2.11比修改Rails代码更好。 - allenhwkim

6
降级到rack 1.4.1应该足以解决此问题。目前已经有一个与此相关的问题正在讨论,我刚刚提交了一个拉取请求,看起来对我来说可以修复这个问题。无论如何,关注这个问题,等问题解决后你就可以升级到rack 1.4.2。
显然,关于如何修复这个问题,还在另一个问题上进行讨论。你可以降级到1.4.1版本,忽略它,或者自己想办法解决,直到问题得到解决(而且如果可能的话,会回溯到旧版本)。

5

在Github上开了一个问题:https://github.com/rails/rails/issues/8789。看起来涉及Rails 3.2.10和Rack 1.4.2之间的一个bug。在这个问题得到解决之前,我认为可以安全地忽略它。

编辑:此问题已在Rails 3.2.11中得到解决。


3

升级Rails至3.2.13版本可以解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接