From: matz@... (Yukihiro Matsumoto) Date: 2003-03-28T07:54:51+09:00 Subject: [ruby-list:37442] Re: Secure「ではない」script の書き方 まつもと ゆきひろです In message "[ruby-list:37438] Re: Secure「ではない」script の書き方" on 03/03/27, 堀川 久 writes: | http://www.nslabs.jp/ruby-eval.rhtml |でRubyスクリプトの実行環境を提供しているのですが、レベル4の制限がきつ |過ぎると感じることがあります。 | |どういうことがしたいかというと、 |  ・CPU、プロセス、メモリの浪費を禁止する。メモリの使いすぎやforkな |   どはエラーにする。 |  ・IO、ネットワークへのアクセスを禁止する。 |ができれば、クラスの定義などは許可したいです。 前者は実は現時点ではできません。サンドボックス実行中のスレッ ドをひとつのThreadGroupに閉じ込めておいて、 * プライオリティを下げる * 一定時間が過ぎるとThreadGroupごと終了させる などの手は打てますが。メモリ関係は今後の課題ですね。一応、レ ベル4ではメモリが足りないとfatalではなく例外にしてあるので、 例外 → スレッド終了 → メモリ解法 ってのを狙ってます。あ、今気がついたけど、捕捉できちゃう例外 経由よりいきなりスレッドを終了させたほうがよかったかも。 後者については「汚染されたクラス・モジュールの変更は許される」 ので、必要なクラスを明示的に汚染するとか、evalの実行を汚染さ れたモジュールでラップするなどで実現できるのではないかと。 p lambda{ class Foo self.taint $SAFE=4 def foo :foo end end foo=Foo.new foo.foo }.call' とか。 |このように、セキュリティモデルをカスタマイズできればいいなぁ、と思うの |ですが、これは難しいでしょうか。 以前も、たしか立石さんからそのようなリクエストを聞いたことが あるのですが、どういうカスタマイズがありえるかという点がはっ きりせず、複雑化するのも避けたかったのでそのままになってます。