Rails version 3.2.5/3.2.4 has been released!

同時刻に2つリリース案内されてます。
どういうこと?3.2.4の扱いは?
とblogを見てみると、どうやら3.2.4はテストが落ちる問題があった模様。
3.2.5では、それをrevert(4ce7f98)したのと
いくつかの修正が入っているようです。


んで、3.2.4のメインの修正は、ActiveRecordの2つの脆弱性対策がされています。

3.2.4ざっくり

CVE対策

Unsafe Query Generation Risk in Ruby on Rails (CVE-2012-2660)
こういったコードで、params[:token]が[nil](nilの配列)になるような
リクエストの場合、後の処理(ここではreset_password)が実行されてしまうという問題のようです。

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


patchも記載されていますが
version upできない人のとりあえずの回避策はこちら。

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

これは書きたくないですね。

コミットはこちら。
Strip nil from parameters hash. · dff6db1 · rails/rails



SQL Injection Vulnerability in Ruby on Rails (CVE-2012-2661)

次のようにwhereの引数にparams[:id]のような値を入れている場合
params[:id]にhash形式で別の値をセットするとSQL Injectionの可能性があったようです。

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

テストコードを見ると、こんな感じ。

Post.where(:id => { 'posts.author_id' => 10 }).first


コミットはこちら。
Post.where(:id => { 'posts.author_id' => 10 }).first


いろいろdeprecateが入っていたり、bugfixがあるのですが
とりあえず面白そうなとこは下記かなと。

・Added #beginning_of_hour and #end_of_hour to Time and DateTime core extensions. Mark J. Titorenko
Pull Request #6156: Beginning and end of hour support for Time and DateTime by mjtko · rails/rails

59分59秒みたいなのをend_of_hourで書けるようになりました。
同様にbeginning_of_hourで00分00秒を表せます。