RAILS PRESS RUBY on RAILS, it’s DRY and COOL …

RSS Feed

RAILS PRESS RSS

Tag Cloud

はてなブックマーク - railspress.matake.jp の注目エントリー
象形文字くさび形文字ミイラそろばんの玉そろばんコーラン占いの板?象牙大英博物館
« 前のエントリ
migrationで初期データを生成するのは辞めた方がよい。
次のエントリー »
Drecom Award on Rails 2007、表彰式を終えて、全イベントを無事終了しました。

Posted on
2007/10/25

Tags
Plugin, バグ, 疑問、質問

Keywords


この記事をはてなブックマークに登録 この記事のはてなブックマーク数 この記事を livedoor クリップに登録この記事の livedoor クリップ数 このエントリを del.icio.us に追加
ブックマークに追加する

ActsAsAuthenticated (acts_as_authenticated)の脆弱性??

RAILS PRESS » [PRESS 0016] acts_as_authenticated Plugin + acts_as_cachedのセットがいい感じです。で紹介したActsAsAuthenticatedプラグインですが、昨日一カ所気になった点があったので、libを直接変更しちゃいました。

ひとまずActsAsAuthenticatedの提供元(?)にもコメントをしておいたのですが、実際に僕のコードで問題が解決できるのかどうかはいまいち自信が無いので、もっといい解決法があれば教えていただけたりすると嬉しいです♪

コメントしたのはココね ⇒ Acts as Authenticated : Discuss

で、問題なのは、RAILS_ROOT/lib/authenticated_system.rbの中のココのメソッド。

ここって、new_userにSymbol以外のオブジェクト(例えばStringとか)入れられたら、そのオブジェクトのid(Object#object_idの返り値と同じ)を返しちゃうんじゃない???

これって、ユーザ数がめちゃくちゃ増えて、rubyがオブジェクトに対して発行するidとmysql側のidの値が一致しちゃったりすると、そのユーザとしてログインしたことになっちゃうじゃん!!!

LANG : RUBY
  1. # Store the given user in the session.
  2. def current_user =(new_user)
  3.   session[:user] = (new_user.nil? or new_user.is_a?(Symbol)) ? nil : new_user.id
  4.   @current_user = new_user
  5. end

ってことで、(ユーザ数がそこまで増えることを見越して)以下の様に変更しました。

LANG : RUBY
  1. # Store the given user in the session.
  2. def current_user=(new_user)
  3.   session[:user] = (new_user.nil? or new_user.is_a?(Symbol) or !new_user.is_a?(User)) ? nil : new_user.id
  4.   @current_user = new_user
  5. end

これで、引数がUserモデルじゃないとnilが返るので、ひとまず安心?
教えて、エラい人。


この記事がお役に立ちましたら、一言コメントもらえると嬉しいですm_ _m


コメントはこちらから




使用可能タグ: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


« 前のエントリ
migrationで初期データを生成するのは辞めた方がよい。
次のエントリー »
Drecom Award on Rails 2007、表彰式を終えて、全イベントを無事終了しました。