いまのマークは、Rubyとして信頼される?
-
26-09-2019 - |
質問
この記事 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
レベルの 優れた説明を嘴書.