From: "akira yamada / やまだあきら" Date: 2001-04-28T15:17:23+09:00 Subject: [ruby-dev:13050] [bug?] cgi/session.rb (ruby-1.6.x, ruby-1.7.x) # 思い付きでBTSにCc:してみましたが, こういうやり方はまずいでしょうか? ruby-1.6.x, ruby-1.7.xのcgi/session.rbですが session_idに変な値を設定されると 変なファイルを見にいってしまうように思います. prefixを指定しとくと少しマシですが, やっぱり変なところを見に行くのには変わりないので たとえばこんな感じにするというのはどうでしょうか? Index: session.rb =================================================================== RCS file: /home/akira/cvs/ruby-src/cvs/ruby/lib/cgi/session.rb,v retrieving revision 1.6.2.4 diff -u -u -r1.6.2.4 session.rb --- session.rb 2001/02/15 02:38:59 1.6.2.4 +++ session.rb 2001/04/28 06:08:51 @@ -26,6 +26,13 @@ md5.hexdigest[0,16] end + class InvalidSessionID < StandardError; end + def Session::check_id(id) + unless /^[0-9a-f]{16}$/o =~ id.to_s + raise InvalidSessionID + end + end + def initialize(request, option={}) session_key = option['session_key'] || '_session_id' id, = option['session_id'] @@ -38,6 +45,12 @@ id, = request[session_key] unless id id, = request.cookies[session_key] + end + begin + Session::check_id(id) if id + rescue InvalidSessionID + raise InvalidSessionID, "session_id `%s' is invalid"%id if option['raise_on_error'] + id = nil end unless id if option.key?('new_session') and not option['new_session'] -- やまだ あきら (akira@arika.org, akira@ruby-lang.org or akira@ad-hoc.org)