3

昨天发布了严重的安全错误,它允许执行任意代码CVE-2013-0156 和 CVE-2013-0155 的 Rails PoC 漏洞利用

我想将 rails 项目从 3.1.1 更新到最新版本:3.2.11

我在 gemfile 中有这些行:

gem 'rails', '3.1.1'
# ...
group :assets do
  gem 'sass-rails',   '~> 3.1.4'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

我更改了 rails 版本并运行bundle update

Fetching source index for http://rubygems.org/
Bundler could not find compatible versions for gem "railties":
  In Gemfile:
    rails (= 3.2.11) x86-mingw32 depends on
      railties (= 3.2.11) x86-mingw32

    coffee-rails (~> 3.1.1) x86-mingw32 depends on
      railties (3.1.10)

Bundler could not find compatible versions for gem "actionpack":
  In Gemfile:
    rails (= 3.2.11) x86-mingw32 depends on
      actionpack (= 3.2.11) x86-mingw32

    meta_search (>= 1.1.0.pre) x86-mingw32 depends on
      actionpack (3.1.0.beta1)

我什至不能用bundle update rails命令更新它。

更新rails的正确方法是什么?如果我在 gemfile 中更新 rails 版本并运行bundlesass-rails/etc 版本会出现错误。
我应该将哪些版本放入此文件中sass-railscoffee-rails我在哪里可以找到这些信息?

PS“~>”是什么意思?

4

2 回答 2

3

3.2.11 不是唯一安全的版本。还发布了其他包含安全修复程序的 gem:3.1.10、3.0.19 和 2.3.15。

从对 3.1 的依赖sass-rails来看,您似乎已经在使用 3.1.10?

您可以使用 3.1.10,也可以升级sass-railscoffee-rails3.2 版本,但您还必须为 Rails 3.2 更新您的应用程序。在您的情况下,我会选择 3.1.10,至少要先获取安全修复程序。

另外,您询问了~>. 这基本上意味着最新版本的 gem 具有相同的主要和次要版本,以及大于或等于您指定的任何版本的点版本,-> 3.1.1最新的 3.1.x 也是如此,但不是任何 3.2 版本。

发生捆绑器错误是因为您告诉它使用 rails 3.2,但sass-rails告诉它使用 3.1。当 Bundler 收到这样相互矛盾的指令时,它不知道该怎么办。

于 2013-01-10T16:44:42.380 回答
2

如果由于某种原因您不能直接更新 Rails 版本,您可能也有兴趣将临时补丁注入config/initializers.

见这里:
https ://groups.google.com/forum/#!topic/rubyonrails-security/61bkgvnSGTQ/discussion

从上面的 Rails 3.x 帖子中,需要运行这些:

# Disable XML
ActionDispatch::ParamsParser::DEFAULT_PARSERS.delete(Mime::XML) 

# Disable YAML and Symbol parsing
ActionDispatch::ParamsParser::DEFAULT_PARSERS.delete(Mime::YAML) 
ActiveSupport::XmlMini::PARSING.delete("symbol") 
ActiveSupport::XmlMini::PARSING.delete("yaml") 
于 2013-01-10T16:35:31.647 回答