Rails version 3.2.6 has been released!

Rails version 3.2.4/5 に続き、またもやセキュリティfixです。

ざっくり

Unsafe Query Generation Risk in Ruby on Rails
    unless params[:token].nil? 
      user = User.find_by_token(params[:token]) 
      user.reset_password! 
    end 

params[:token] が ['xyz', nil]を返すような場合
SQLとしては、 IN ('xyz', NULL) と追加されてしまうという対応のようです。
前回の続き物ですね。


to_sするこの回避策も嫌ですね。upgradeしておきたいところ。

    unless params[:token].nil? || params[:token].to_s.empty? 
      user = User.find_by_token(params[:token].to_s) 
      user.reset_password! 
    end


Creditを見てみると、githubをhackしたEgor Homakov さんの名前が。


SQL Injection

これがまずいらしいです。

Post.where(:id => params[:id]).all 

回避策はこちら。

Post.where(:id => params[:id].to_s).all


testコードを見てみると
どうやら、hashの入れ子だとSQL Injectionされていたようです。
だから回避策で to_s してるのか。

diff --git a/activerecord/test/cases/relation/where_test.rb b/activerecord/test/cases/relation/where_test.rb 
index 90c690e..b9eef1d 100644 
--- a/activerecord/test/cases/relation/where_test.rb 
+++ b/activerecord/test/cases/relation/where_test.rb 
@@ -11,6 +11,12 @@ module ActiveRecord 
       end 
     end 
  
+    def test_where_error_with_hash 
+      assert_raises(ActiveRecord::StatementInvalid) do 
+        Post.where(:id => { :posts => {:author_id => 10} }).first 
+      end 
+    end 

actionpack

・Deprecate :confirm in favor of ':data => { :confirm => "Text" }' option for button_to, button_tag, image_submit_tag, link_to and submit_tag helpers.

activerecord

・update_attribute(※3.2.7予定)がdeprecate
次回release予定ですが、update_attributeがupdate_columnに変わるようです。
まぁ、update_attributesと間違えやすかったですからね。