From: Taku Nakajima Date: 2003-03-24T17:22:38+09:00 Subject: [ruby-list:37405] Re: Secure「ではない」script の書き方 中島@ブレーンです。 > たとえば、 > ・正規表現の中に、ごにょごにょ入れるとスコーンと抜ける > ・C で実装してある某拡張ライブラリのここが、あれなので、safe level 4 > でも、ずるっと行ってしまう > # 拡張ライブラリ作成・利用時におけるチェック方法が個人的には気に > # なります。 strscanでまさにそのような例を発見しました。同じようなことをしても標準 のRegexpクラスでは汚染が伝染するのに、StringScannerでは伝染しません。 require 'strscan' tainted_string='aaabbb'.taint /a*/ =~ tainted_string should_be_tainted = $& p should_be_tainted p should_be_tainted.tainted? # true should_be_tainted = tainted_string.scan(/a*/)[0] p should_be_tainted p should_be_tainted.tainted? # true sc = StringScanner.new(tainted_string) should_be_tainted = sc.scan(/a*/) p should_be_tainted p should_be_tainted.tainted? # false 私は最後の行でtrueが出てほしいと思うのですが、それが正しいかどうかは確 信がありません。このような場合の指針のようなものはあるのでしょうか? # ちなみに、amritaの拡張ライブラリでは今の所、一切taintを考慮していません。 -- 「stableでなければ生きていけない。unstableでなければ生きてる意味がない」 中島 拓 (株)ブレーン 研究部 (tnakajima@brain-tokyo.jp) http://www.brain-tokyo.jp/research/amrita/