まつもと ゆきひろです

In message "Re: [ruby-dev:26479] Re: $SAFE=1 の open-uri で redirect 	時にエラー"
    on Fri, 8 Jul 2005 20:24:09 +0900, Tanaka Akira <akr / m17n.org> writes:

|べつに証明を求めているわけではありませんが、なぜ問題が起きなさそうなの
|か、おおざっぱな理屈は知りたいと思っています。

redirect文字列はURI.parseで分解される。分解された各要素のう
ち、address(host名)とport はTCPSocket.newに渡される。
TCPSocket.new()は(現状では) untaintedな文字列を要求している
が、host名は存在するホスト名ならば接続に成功するし、存在しな
いホスト名ならばたんに接続に失敗するだけ。port も存在するサー
ビス(またはポート番号)ならば成功し、存在しなければ失敗するだ
け。なので、これらについてはtaintedであることを保存しなくて
も(チェックをバイパスしても) 信頼性に変化はない。URI の残り
の部分はopenしたソケットを介してサーバに送りつけるだけで、送
信はtaintの有無にかかわらず成功するので、これもuntaintしても
同じである。

というように考えています。これが田中さんに伝わらないなら、私
の説明が悪いか、なにか見落としがあるのかどちらかでしょう。

|問題が起きなさそうだとするおおざっぱな理屈さえもメンテナが理解できない
|なら、taint という安全性のための機構を bypass するのは不適切だと思いま
|す。

いや、理解できないのにやれとは申しません。

                                まつもと ゆきひろ /:|)