[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[kagemai-users:0594] Re: ruby1.8.5で動作せず
須藤です.
In <20061030225646.ec360270.yasuo@xxxxxxxx>
"[kagemai-users:0593] Re: ruby1.8.5で動作せず" on Mon, 30 Oct 2006 22:56:46 +0900,
Eto Yasuo <yasuo@xxxxxxxx> wrote:
> [Fri Oct 20 01:23:51 2006] [error] [client 127.0.0.1] client denied by server co
> nfiguration: /home/foo/site/kagemai/index.html
> /usr/share/kagemai//lib/kagemai/message_bundle.rb:69:in `intern': Insecure: can'
> t intern tainted string (SecurityError)
たぶん,やまださんが示してくれたやつが原因だと思います.
手元では,FreeBSDのruby 1.8.5だと
$ ruby -e '$SAFE=1; s="foo"; s.taint; s.intern'
-e:1:in `intern': Insecure: can't intern tainted string (SecurityError)
from -e:1
が再現せずにDebianのruby 1.8.5だと再現しました.
とりあえずでよければ
> [該当行を含むメソッド]
> 59 def load_messages(file)
> 60 file.each do |line|
> 61 line = line.sub(/#.*/, '').strip()
> 62 next if line.empty?
> 63
> 64 key, *message = line.split(/=/)
> 65 key = key.to_s.strip
key = key.to_s.strip.untaint
これでうごきませんか?
> 66 message = message.join('=').to_s.strip
> 67 next if (key.empty? || message.empty?)
> 68
> 69 @messages[key.intern] = message
> 70 end
> 71 end
他にも,ファイルなど外部から入力された文字列をuntaintしてや
れば動くと思います.