2005-07-16 (Sat) [長年日記]
_ Login GeneratorのSession Fixation Attack対策(2)
これを回避するには以下のようにセッションをリセットしてやればよい。
[Journal InTime - CSRF対策 , Login GeneratorのSession Fixation Attack対策 , クッキーのパス , セッションファイルの作成場所より引用]
某所でセッションデータは引き継ぎたいという話があったのでちょっと改良。
def login
case @request.method
when :post
user = User.authenticate(@params[:user_login], @params[:user_password])
if user
@session[:user] = user
data = @session.instance_variable_get(:@data)
@request.reset_session
@session = @request.session
for key, val in data
@session[key] = val
end
flash['notice'] = "Login successful"
redirect_back_or_default :controller => "page", :action => "list"
else
flash.now['notice'] = "Login unsuccessful"
@login = @params[:user_login]
end
end
end
もうちょっとマシな方法はないものか。
_ Login GeneratorのSession Fixation Attack対策(3)
しつこいようですが。
RailsではクッキーでしかセッションIDは渡されないので、session fixation は難しいのではないかという話がある。
しかし、たとえば、ホスティングサービスなどで、同一ドメイン上に信頼 できない他のウェブアプリケーションが存在する場合などは危険だ。 また、他のXSS脆弱性との合わせ技といったことも考えられるので、 対策はしておいた方がよいと思う。
[ツッコミを入れる]