Rails:更新到非易受攻击的版本

时间:2013-01-10 15:48:52

标签: ruby-on-rails ruby

昨天严重污染错误已发布,它允许执行任意代码Rails PoC exploits for CVE-2013-0156 and CVE-2013-0155

我想将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版本并运行bundle,则sass-rails / etc版本会出错。
我应该在此文件中添加哪些版本的sass-railscoffee-rails?我在哪里可以找到这些信息?

P.S。什么是“〜>”意思?

2 个答案:

答案 0 :(得分:3)

3.2.11不是唯一的安全版本。还发布了其他宝石,其中包括安全修复程序:3.1.10,3.0.19和2.3.15。

sass-rails中对3.1的依赖,看起来你已经在使用3.1.10?

您可以使用3.1.10,或将sass-railscoffee-rails升级到3.2版本,但您还必须为Rails 3.2更新您的应用。在你的情况下我会选择3.1.10,至少要先拿起安全修复程序。

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

发生了捆绑器错误,因为您告诉它使用rails 3.2,但是sass-rails告诉它使用3.1。 Bundler不知道在给出相反的指示时该怎么做。

答案 1 :(得分: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")