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の値が一致しちゃったりすると、そのユーザとしてログインしたことになっちゃうじゃん!!!
-
# Store the given user in the session.
-
def current_user =(new_user)
-
session[:user] = (new_user.nil? or new_user.is_a?(Symbol)) ? nil : new_user.id
-
@current_user = new_user
-
end
ってことで、(ユーザ数がそこまで増えることを見越して)以下の様に変更しました。
-
# Store the given user in the session.
-
def current_user=(new_user)
-
session[:user] = (new_user.nil? or new_user.is_a?(Symbol) or !new_user.is_a?(User)) ? nil : new_user.id
-
@current_user = new_user
-
end
これで、引数がUserモデルじゃないとnilが返るので、ひとまず安心?
教えて、エラい人。












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