以下の内容はhttps://unageanu.hatenablog.com/entry/20080827/1219827794より取得しました。


汚染されたクラスの利用

注 (2008-08-28)
最新のRuby(1.8.7-p72)ではメソッド呼び出し制限の動作が修正されています。最新の環境での制限表は、続 汚染されたクラスの利用を参照ください。


汚染されたクラスの利用について、気になっていたことの検証結果をまとめる。

クラスの汚染

セーフレベル3または4でクラスを作成するか、

tainted_calss = Thread.fork {
  $SAFE = 3
  class TaintedClass
    attr :test, true
    self
  end
}.value

クラスのtaintを呼び出すと、クラスを汚染できる。(試した限りではどちらも同じ挙動だった。)

tainted_calss2 = class TaintedClass2
  attr :test, true
  self
end
tainted_calss2.taint

クラス/インスタンスの汚染とメソッドの汚染

クラスが普通 クラスが汚染
インスタンスが普通 メソッドは普通 メソッドは汚染
インスタンスが汚染 メソッドは普通 メソッドは汚染

なお、汚染されたメソッドは、強制的にセーフレベル4で実行されるとのこと(→ Rubyリファレンス セキュリティモデル)

各セーフレベルでのインスタンス/メソッドの汚染によるメソッド呼び出しの制限

  • セーフレベル0では、汚染されたメソッド(=汚染されたクラスのメソッド)を実行できない。
  • セーフレベル4では、汚染されていないインスタンスのsetメソッドを実行できない。
  • もちろん、メソッド内で各セーフレベルで禁止されている行為(ファイルの書き込みなど)を行っている場合はこの限りではないですよ。
セーフレベル0 セーフレベル1-3 セーフレベル4
クラス:汚染/インスタンス:汚染 ×
クラス:通常/インスタンス:汚染
クラス:汚染/インスタンス:通常 × ×(setのみ/getは可)
クラス:通常/インスタンス:通常 ×(setのみ/getは可)

※○..メソッドの実行可, ×..メソッドの実行不可




以上の内容はhttps://unageanu.hatenablog.com/entry/20080827/1219827794より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14