[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してや
れば動くと思います.