前田です。

Yukihiro Matsumoto wrote:
> |redirect先との通信が成功するかどうかではなく、redirect先との
> |通信が何らかのセキュリティ上の問題を引き起こす可能性があるか
> |どうかを判断の基準にするべきではないでしょうか。
> 
> 「redirect先との通信が何らかのセキュリティ上の問題を引き起こ
> す」というのは具体的にどういうケースなんでしょうか。RFC2616
> くらいちゃんと読んでから考えるべきかもしれませんが。

たとえば、RFCではredirect先にPUTしてはいけないことになっている
わけですが、仮にPUTがredirectされたとすると、本来はIPアドレス
ベースでPUTが制限されているURLにデータの書き込みをさせることが
できてしまったりする危険性がないでしょうか。

OpenURI.redirectable?の仕様が明らかになっていて、redirect先の
URLが一定の条件をみたす場合にuntaintしてredirectされることを
ユーザが理解して使うのであれば、問題ないように思います。
ユーザが最初にopen-uriに渡すURLがtainted?でないということによって、
open-uriがredirect先のURLをuntaintすることを是認したと判断
できるわけですから。
仮にPUTが無条件にredirectされたとしても、ユーザがそのことを
理解して使う(たとえばredirect元URLを無条件に信頼してよいと
判断したとか)のであれば、(少なくともライブラリ側としては)
問題ないように思います。

ライブラリがuntaintする際のおおざっぱな指針としては、

(1) untaint前には明らかな危険性はチェックによって排除する。
(2) どのようなデータが自動的にuntaintされ、どのような処理に
    利用されるかをドキュメントに明記し、ユーザがライブラリ
    に渡したパラメータがtainted?でないことによって、リスク
    を受け入れたと判断する。
    (ただし、(1)によるチェックでuntaintが無条件に安全である
    と判断できる場合はドキュメントに記述する必要はない。)

といったところでしょうか。
# 問題があればご指摘ください。

ライブラリ側でuntaintしないですませることができれば、
それにこしたことはないと思うのですが、ユーザはライブラリが
内部で外から取りこんだデータをuntaintするすべがないので、
ある程度はuntaintしてくれないと使いにくいですねえ。
何かもっとうまい仕組みがあればよいのですが。

-- 
前田 修吾