From: Seiji Y. <val...@gm...> - 2006-11-17 08:00:15
|
山口です。 ruby のバージョンの 1.8.5 に入れ替えたあたりから、recent_rss.rb が Security Error を出すようになりました。 エラーメッセージは以下のようになります。 Insecure: can't intern tainted string (SecurityError) /usr/lib/ruby/1.8/rss/parser.rb:314:in `respond_to?' ./core/tdiary.rb:92:in `join' ./core/tdiary.rb:92:in `safe' ./core/tdiary.rb:697:in `eval_src' ./core/tdiary.rb:1033:in `do_eval_rhtml' ./core/tdiary.rb:975:in `eval_rhtml' ./core/index.rb:73 ...(略)... 調べてみたところ、rss/parser.rb の該当行では入力の rss から切り出された 要素名を引数に respond_to? が呼ばれているのですが、ruby 1.8.5 からは $SAFE レベル 1 以上で汚染された文字列を intern 出来なくなった為、上の事 象が発生するようになった様子です。 recent_rss.rb 側で出来る対応としては、取得した rss を RSS::Parser.parse に渡す前にあらかじめ untaint しておく位しか思いつきませんでした。 一応パッチを添付しておきます。 --- recent_rss.rb 18 Mar 2006 03:18:16 -0000 1.4 +++ recent_rss.rb 7 Oct 2006 14:29:48 -0000 @@ -104,7 +104,7 @@ raise InvalidResourceError if rss_source.nil? # parse RSS - rss = ::RSS::Parser.parse(rss_source, false) + rss = ::RSS::Parser.parse(rss_source.untaint, false) raise ::RSS::Error if rss.nil? # pre processing # 本来なら rss/parser.rb で適当にサニタイズして、最小の範囲で untaint してくれる のが筋かなあと思いつつ。 以上、よろしくお願いします。 -- YAMAGUCHI Seiji <va...@un...> http://underscore.jp |