昨天严重污染错误已发布,它允许执行任意代码: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-rails
和coffee-rails
?我在哪里可以找到这些信息?
P.S。什么是“〜>”意思?
答案 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-rails
和coffee-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")