私はdocsでRubyの文字列方法について読んで、私は、彼らが何をすべきか分からないRubyのObject#taintとObject#trustメソッドは何ですか?
taint
trust
untaint
untrust
方法accross来ましたどのような状況で使用していますか?誰もそれらのいずれかを使用していますか?例は良いでしょう。
私はdocsでRubyの文字列方法について読んで、私は、彼らが何をすべきか分からないRubyのObject#taintとObject#trustメソッドは何ですか?
taint
trust
untaint
untrust
方法accross来ましたどのような状況で使用していますか?誰もそれらのいずれかを使用していますか?例は良いでしょう。
taint
およびtrust
は、Rubyのセキュリティモデルの一部です。 Rubyでは、各オブジェクトにはいくつかのフラグがあり、そのうちの2つはTrustedフラグとTaintedフラグです。これらのフラグがどのように作用するかは、安全レベルと呼ばれるものによって決まります。安全レベルは$SAFE
に保存されています。
プログラム内の各スレッドとファイバーは、それ自身の安全レベルを持つことができます。安全なレベルの範囲は0から4までです。0はセキュリティを強制せず、4はあなたがeval
のコードである場合にのみ使用するべきです。 にはを割り当てることはできません。すでにあるよりも小さい値を$SAFE
に割り当てます。また、Rubyスクリプトがsetuidとして実行UNIXシステムでは、Rubyは自動的にオブジェクトがどこから来たことを、おおよそ、意味オブジェクトは、それが汚染されていますしてい
フラグセットを、汚す1.
taint
- オブジェクトを汚染させます。安全レベル4を除いて、すべてのレベルでオブジェクトを汚すことができます。tainted?
- オブジェクトが汚染されていないかどうかを確認します。untaint
- オブジェクトから汚れを取り除きます。これは、のみ安全なレベル0,1、および2で使用できます。 # internal data
# =============
x1 = "a string"
x1.tainted? → false
x2 = x1[2, 4]
x2.tainted? → false
x1 =~ /([a-z])/ → 0
$1.tainted? → false
# external data
# =============
y1 = ENV["HOME"]
y1.tainted? → true
y2 = y1[2, 4]
y2.tainted? → true
y1 =~ /([a-z])/ → 1
$1.tainted? → true
を使用すると、汚染されたデータに危険なメソッドを使用することはできません、要約すると:ここ
は汚す示しpragprogつるはし(source)からの例です。だから、あなたは安全なレベル3でこれを行う場合は、あなたがエラーを取得したい:
eval(gets)
信頼がずっと簡単です。信頼は、オブジェクトが信頼できるソースか信頼できないソースから来たものかどうか(基本的に、それが安全レベル4か安全レベル4よりも低いものから来たものかどうか)に関係しています。ここをクリックしてください: http://www.ruby-forum.com/topic/1887006
はここにいくつかのより多くのリソースです: http://phrogz.net/ProgrammingRuby/taint.html - 安全なレベルにいくつかの素晴らしいもの、私はそれが1.8からだと思う - 更新されたバージョンは、ちょうど唯一の本の印刷されたバージョンでは、1.9のためにそこにあります。
http://www.ruby-forum.com/topic/79295 - 安全が十分に安全かどうか。
taint
およびtrust
は、オブジェクトがどこにでも持ち運ぶフラグを設定します。 Ruby-doc.orgの唯一の違いは、汚染されたオブジェクトが与えられたときにはメソッド呼び出しが異なって振る舞いますが、信頼はプログラマが解釈するまではまったく同じように見えるということです。
汚染の主な目的は、潜在的に危険なものとしてユーザ入力をフラグすることです。動的にロードされるスクリプトまたはCGIフォームデータ。次に、コード内の他の場所でオブジェクトを使用する前に、オブジェクトが安全であり、オブジェクトを保護しないようにするサニタイズメソッドを実装します。
「What's the purpose of tainting Ruby objects?」も参照してください。
ルビーのデータについてtainted
に関する情報を私に提供しました。
http://ruby.about.com/od/advancedruby/a/tainted.htm
"Tainted" objects are those that have come from some type of user input. Either from a file, the keyboard or the network, unless the object is a literal in the program or created by the program directly, it will be tainted. The tainted flag is always there on your objects, all you have to do is check it before you do anything unsafe. If you've confirmed that the data is indeed safe, you can then untaint the object.
https://www.thoughtco.com/what-is-programming-958331へのリンクリダイレクト – infomaniac
悲しいことにはい@infomaniac。それは最初に働いていた – PriteshJ
彼らは、Rubyのセキュリティモデルの一部です。 – Linuxios
Okk、これまでにそれを使用したことがありますか?言葉のセキュリティそれ自体はそれをより面白くする:) – PriteshJ
私は彼らと一緒に働いていないが、私はすぐに答えを与えるかもしれません。それは私がいる場所の夜なので、朝はそうかもしれません。 – Linuxios