From: Akinori MUSHA Date: 2001-05-28T12:34:24+09:00 Subject: [ruby-list:29834] Re: YARPC 19101 At Mon, 28 May 2001 11:34:57 +0900, akira yamada / やまだあきら wrote: > |安全なevalは、本体(この場合Ruby/Perl)から提供されるべきです。 > > In article 29817, <990972564.497445.24150.nullmailer@ev.netlab.zetabits.com> > Y> Rubyなら「スレッド立てて$SAFE=4」でかなり安心できますね。完 > Y> 璧ではないかもしれませんが、穴があれば私のせいですし。 > > 「$SAFEでかなり安心」というのはその通りだと思うんですが, > それだけだと外界との接触を断つことになってしまうのではないですかね.  そうですね。外界との接触のさまざまな場面を考えると、 $SAFE よりもっと粒度の細かいセキュリティモデルを導入する必要があり ますね。  例えば Java のセキュリティポリシーとか、今回話題になっている Perl の Safe とか。 > 外界から与えられたコードをそのままevalは > そもそもできないわけで(あってますよね? ^_^;), > なんらかの準備なり細工なりをしてからevalその他の処理を > することになると思うんですが > そのあたりどうするのがよいのかなと. > > 多分PerlではそのあたりのことをSafeがやってくれるのかなと > 思ったんですが, そういうのがRubyでもほしいですね.  Perl の Safe は、 compartment というサンドボックスを作り、 その中で許すことを細かい opcode 単位、あるいはその opcode を 種類ごとににまとめたグループ(opcode tag)ごとに設定するという 構造になっています。その中は、独立した名前空間になっていて、 変数ごとの細かいアクセス制御もかけられます。  実装は見ていないんですが、 compile なるプロセスでコードを 解析しているようです。eval については当然トラップされ、その compartment の基準によるチェックが入ります。 -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "Freeze this moment a little bit longer, make each impression a little bit stronger.. Experience slips away -- Time stand still"