From: Masatoshi SEKI Date: 2005-07-12T06:32:32+09:00 Subject: [ruby-dev:26521] Re: WEBrick DoS vulnerability 咳といいます。 On 2005/07/10, at 16:36, GOTOU Yuuzou wrote: > In message <42CFDD3A.1050100@ruby-lang.org>, > `Shugo Maeda ' wrote: > >> では、1.8では移行措置として、 >> >> * socketはデフォルトでnon-blocking modeにする。 >> * readの挙動も1.9と同様にする。 >> (今の1.8の仕様では、non-blocking modeにすること >> による挙動の違いが >> 大きいため) >> * ただし、ユーザが明示的にnon-blocking modeにした場合 >> は、readの挙動 >> を現状の1.8と同じ(読めるだけのデータをすぐに返 >> し、single thread >> では読めるデータがない場合にはEAGAINを発生)にす >> る。 >> >> というのはどうでしょう。 >> > > EAGAINが発生するのはsingle threadの時だけだとすると、三 > つ目 > はあまりよくないと思います。なぜなら、仮にEAGAINを利用し > てデー > タが読み出せないことを検出するようなライブラリを考えると、そ > れはmulti threadの時には期待通りに動作しない可能性がある > から > です。データの到着を調べる時はthreadを使っているかどうか > に関 > 係なく動くようにIO.selectを使うべきであれば、そのように > 誘導 > する仕様になっているのが好ましいので、EAGAINを上げるとい > う挙 > 動は残さないほうがいいと私は思います。 > > 最初の二つについては、そのほうが使い勝手がよさそうなので基本 > 的には賛成です。しかし、読める分だけをとりあえず返すという現 > 状の仕様にもさほど無理を感じませんから、あまり変えない方向で、 > > * EAGAINの場合は勝手にリトライする > * EAGAINの場合は""を返す > * 動作は変えずに、[ruby-dev:25430]で提案されている警告に > 「single threadの場合は」という条件を追加する > > のどれかくらいでいいんじゃないとも思います。 指定したサイズの中で読めた分だけ返す、が、 指定したサイズ全部読めてから返す、に変わっても、 スクリプトは変化に気がつかない気がするのですが そうでもないのかな。 あ、挙動を変えないことが目的なのかしら。