ただただしです。

2009/1/28  <ds14050 / vvvvvv.sakura.ne.jp>:
> こちらで一応調べてみた結果が日記に書いてあります。
> 若干まとまりがありませんが何かの足しにしてください。
>
> http://vvvvvv.sakura.ne.jp/ds14050/diary/20090113.html#p01 事の起こり
> http://vvvvvv.sakura.ne.jp/ds14050/diary/20090114.html#p01 事の起こり
> http://vvvvvv.sakura.ne.jp/ds14050/diary/20090116.html#p01 問題1
> http://vvvvvv.sakura.ne.jp/ds14050/diary/20090117.html#p01 問題2,まとめ
> http://vvvvvv.sakura.ne.jp/ds14050/diary/20090119.html#p01

情報ありがとうございます。読んでなかった!

ds14050さんのおっしゃるように、あとから追加したパスをuntaintしたら
requireでのエラーは消えました。#でもそのあとのwriteでまたエラー orz

西山さんや黒田さんの情報も確認しました。まとめると$SAFE=1では以下
のような問題が発生するようです。CGIを$SAFE=1で動かすのはよく使わ
れている手法で、mod_rubyも同様な環境なので、これはまずいんじゃない
かと思います:

1. $LOAD_PATHの中に汚染されたパスが混じっていると、そこに含まれな
  いパスからのrequireも問答無用でSecurityErrorになる

  汚染されたパスでファイルを見つけたときにだけエラーになって欲しい。
  もしくは、もうちょっと詳細なメッセージが欲しい。現状のSecurityError
  は、エラー情報が丸め込まれてしまっている印象。

2. 拡張ライブラリが$SAFE=1のもとでrequireできない

  回避策がないような? stringioを内部でrequireしているopen-uriなどがいっ
  さい使えなくなります。バグだと思うのですが。

3. gemも$SAFE=1のもとでは使えない

  1.と同根だと思いますが、実行時に動的に追加されたパスがすべて汚染さ
  れているので、$SAFEではgemがrequireできなくなっています。


#まだ他にもあるヨカン……

-- 
♪ツッコミは、短く鋭く愛を込めて。
ただただし <http://tdtds.jp/>
※メールアドレスが変わりました※