かずひこです。
$SAFE=1 の時に open-uri でアクセスした URI が redirect されたときに、
untaint が伝播せずに security error になります。
例えば、http://www.ruby-lang.org/ -> http://www.ruby-lang.org/en/ の時に、
こんな感じになります。
$ ruby-1.8 -v -r open-uri -e '$SAFE=1; open( "http://www.ruby-lang.org/".untaint)'
ruby 1.8.3 (2005-07-05) [i686-linux]
/usr/lib/ruby/1.8/net/protocol.rb:83:in `initialize': Insecure operation - initialize (SecurityError)
from /usr/lib/ruby/1.8/net/protocol.rb:83:in `connect'
from /usr/lib/ruby/1.8/net/protocol.rb:82:in `timeout'
from /usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
from /usr/lib/ruby/1.8/net/protocol.rb:82:in `connect'
from /usr/lib/ruby/1.8/net/protocol.rb:64:in `initialize'
from /usr/lib/ruby/1.8/net/http.rb:429:in `do_start'
from /usr/lib/ruby/1.8/net/http.rb:418:in `start'
from /usr/lib/ruby/1.8/open-uri.rb:245:in `open_http'
from /usr/lib/ruby/1.8/open-uri.rb:629:in `buffer_open'
from /usr/lib/ruby/1.8/open-uri.rb:167:in `open_loop'
from /usr/lib/ruby/1.8/open-uri.rb:165:in `catch'
from /usr/lib/ruby/1.8/open-uri.rb:165:in `open_loop'
from /usr/lib/ruby/1.8/open-uri.rb:135:in `open_uri'
from /usr/lib/ruby/1.8/open-uri.rb:531:in `open'
from /usr/lib/ruby/1.8/open-uri.rb:86:in `open'
from -e:1
redirect された二回目に open-uri.rb:221 に来た時点で、
221: target_host = target.host
target.tainted? => false
target.host.tainted? => true
になっているようです。報告だけですみませんが、よろしくお願いします。
--
かずひこ <http://wiki.fdiary.net/kazuhiko/>
「恋とハックはアジャイルが命!」