From: matz@... (Yukihiro Matsumoto) Date: 1997-04-10T16:33:38+09:00 Subject: [ruby-list:2758] Re: security model まつもと ゆきひろです. In message "[ruby-list:2751] Re: security model" on 97/04/10, 石塚圭樹 writes: |けいじゅ@SHLジャパンです. |プログラムに埋め込まれている文字列(リテラル)は新たに生成される文字列と |して扱われているのかな? それなら問題ないかも知れない. そう扱われます.rubyは文字列リテラルは実際には実行時にコピー されています.でないと,リテラルに破壊的な操作をした時にプロ グラムが壊れちゃう. |file = open(/tmp/foo) |loop do | file << "foo" |end | |このプログラムでもある意味では危険だし... レベルが幾つになるか分からな |いけど... |このセキュリティモデルとは何のためのセキュリティなのでしょうか? いろいろなレベルがあると思うわけです.で,perlのtaintなどは コードは信頼できるが入力(ARGVなども)は信頼できない 場合なわけです.これはsuidされた信頼できるスクリプトで,スク リプトを書き換えない範囲で危険な事を行えないようにするもので す.今回のセキュリティモデルだと1あたりが,これに該当します. しかし,Appletのような場合には コードが信頼できない.入力もあまり信頼できない という場合なわけですね.セキュリティレベル3あたりからはそう いうことの検出を念頭においています.んで,汚れの伝搬に関して ですが,レベルが低い間はコードは信頼できますので,コードによっ て操作された文字列は汚れてないとみなしても構わないと思われま す.もちろん,ぽかよけとしてはある程度伝搬した方が良いと思い ますが.完全である必要はありません. セキュリティレベル3以上の場合はコードは信頼できないんですが, 操作を加えた文字列は汚れていますから,この点に付いては気にす る必要は無いです. | * 情報を盗む | * ファイルに書き込む/改変 | * OSへの悪影響 | |これらに対して, どのレベルでどのような制限が設けられるのかをはっきりさ |せた方が良いのでは? ですから,簡単にいうと レベル0 - なにもなし レベル1 - スクリプトは信頼できる レベル2 - スクリプトはある程度信頼できる レベル3 - スクリプトは信頼できない レベル4 - スクリプトはより信頼できない 大域変数変更の禁止 出力の制限(ここに入れましょう) レベル5 - スクリプトはもっと信頼できない インスタンス変数,配列,連想配列の変更の禁止 という感じでしょうか? レベル5はちょっと厳しすぎるのであれで すが,アプレットはレベル4くらいでしょうか. まつもと ゆきひろ /:|) p.s. 本当は1次元で表すのは難しいのだが….