From: Shugo Maeda Date: 2005-07-20T11:44:20+09:00 Subject: [ruby-dev:26584] Re: $SAFE=1 の open-uri で redirect 時にエラー 前田です。 Tanaka Akira wrote: >>ライブラリに関しては、割り切って、 >> >>(1) 外部の資源にアクセスするメソッドについては、引数がtainted?ならば >> 例外を発生させる(明示的に発生させなくても他のメソッドの呼びだしで >> 発生すればOK)。 >>(2) 引数がtainted?でなければ、内部で取得したデータは必要に応じて勝手に >> untaintしてもよい。 >> >>という方針でもいいのかなとも思うのですが、乱暴すぎるでしょうか。 > > > その方針によって実現されるのはどのような安全性ですか? 「アプリケーションが、意図せずに、外部からの入力をもとに、外部の資源 にアクセスすること」を防ぐことができると考えています。 もちろん、ライブラリがどのような資源にアクセスするかを、ライブラリの ユーザが知っていることが前提です。 これについては、taint機構にかかわらず、ユーザはライブラリがアクセスする 資源を知っているべきだと思います。 もし、ユーザがredirectのリスクを知らずに使うおそれが高いので$SAFE == 1 では禁止しようということになるのであれば、$SAFE == 0でも(デフォルトでは) redirectしない方が望ましいのではないかと思います。 また、ライブラリの作成者にとっても、untaintを行う時点で、明らかな脆弱性 (外部から取得した文字列をそのままsystemに渡していた、など)について気付く 機会を得ることができるという意味で有用だと思います。 上記の(2)で「勝手にuntaintしてもよい」と書きましたが、何も考えずに untaintしてよいと思っているわけではありません。 -- 前田 修吾