質問

この記事 http://www.stuartellis.eu/articles/erb を参考にスレッドの安全性レベル

"このレベルでは、指定された結合を特徴とするものでなければなとして信頼されるための様にお使い頂けます。"

思索の高低いため"マークの"結合"として信頼できる".

まっください啓発すか?

役に立ちましたか?

解決

すべ 汚れ の結合を呼び出しの taint 方法。

$SAFE レベルの特徴でRubyを否定する、一定の行為によっては、現在のレベルからオブジェクト 汚染された.汚染された文字列にとら信頼できないソースなどのファイル、データベースは、HTTPク等

$SAFE レベル1は、例えばRubyすることはできません require ファイルの場合は引数が汚染された文字列になります。

$SAFE レベル4が最す。Rubyを活用を許可しますの変更 当nontained オブジェクトです。の考え方を利用できる低 $SAFE レベルにお申し込み、インスタンス化のスレッドまたは集と $SAFE レベル4.この サンドボックス, を修正でき 汚染された オブジェです。

様の用途にはこのメカニズムで実行することができテンプレート内の出来上がります。しようとした場合の結果の描画されるテンプレートから一定の結合には、こう:

class TemplateContext
  def name; "Teflon Ted"; end
end

template_binding = TemplateContext.new.send(:binding)
ERB.new("Hi, <%= name %>!", 4).result(template_binding)

#=> SecurityError: Insecure: can't modify trusted binding

Blam! これはRubyのではないことがおわかり頂けることが ないでも大丈夫で修正nontainted オブジェクト $SAFE レベル4.ですることはできません電話 eval 指定された結合であるなど様の試み).

ようにいくつかの異なる提供のサンドボックス付 汚染された 拘束力を有します。おいて明示的に語Rubyることも大丈夫で使うことの結合にサンドボックスことになるすべきではない信頼される外部の出来上がります。

class TemplateContext
  def name; "Teflon Ted"; end
end

# Binding must be tainted!
template_binding = TemplateContext.new.send(:binding).taint
ERB.new("Hi, <%= name %>!", 4).result(template_binding)

#=> "Hi, Teflon Ted!"

情報はRubyの $SAFE レベルの 優れた説明を嘴書.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top