私はドキュメントでRuby文字列メソッドについて読んでいて、メソッドに出くわしました
taint
trust
untaint
untrust
彼らが何をしているのかわかりませんが、どのような状況で使用しますか?誰かがそれらのいずれかを使用しましたか?例がいいでしょう。
taint
そしてtrust
、Rubyのセキュリティモデルの一部です。Rubyでは、各オブジェクトにはいくつかのフラグがあり、そのうちの2つはTrustedフラグとTaintedフラグです。これらのフラグがどのように機能するかは、セーフレベルと呼ばれるものによって異なります。安全レベルはに保存され$SAFE
ます。
プログラム内の各スレッドとファイバーは、独自の安全レベルを持つことができます。安全レベルの範囲は0〜4で、0はセキュリティを適用せず、4はセキュリティを適用するため、eval
コードを実行しているときにのみ使用する必要があります。すでに持っているよりも低い値を割り当てることはできません。$SAFE
また、Rubyスクリプトがsetuidとして実行されるUNIXシステムでは、Rubyは自動的に安全レベルを1に設定します。
オブジェクトに汚染フラグが設定されている場合、それは大まかに言って、オブジェクトが信頼できないソースからのものであり、したがって機密性の高い操作で使用できないことを意味します。安全レベルが0の場合、汚染フラグは無視されます(ただし、設定されている場合は、必要に応じて注意を払うことができます)。汚染に関連するいくつかの方法があります:
taint
-オブジェクトを汚染します。安全なレベル4を除いて、すべてのレベルでオブジェクトを汚染することができます。tainted?
-オブジェクトが汚染されているかどうかを確認します。untaint
-オブジェクトから汚染を取り除きます。これは、安全レベル0、1、および2でのみ使用できます。これは、汚染を示すpragprog pickaxe(ソース)の例です。
# 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
要約すると、汚染されたデータに対して危険な方法を使用することはできません。したがって、これを安全なレベル3で行うと、エラーが発生します。
eval(gets)
信頼ははるかに簡単です。信頼は、オブジェクトが信頼できるソースからのものか、信頼できないソースからのものか、基本的には、安全なレベル4未満のものか、安全なレベル4のものかと関係があります。Rubyの信頼がどのような影響を与えるかは正確にはわかりませんが、ここを見てください: 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フォームデータなど、潜在的に危険なユーザー入力にフラグを立てることです。次に、オブジェクトが安全であることを確認し、コードの他の場所で使用する前にオブジェクトを汚染しないサニタイズメソッドを実装します。
「 Rubyオブジェクトを汚染する目的は何ですか? 」も参照してください。
私へのこのリンクtainted
は、ルビーのデータについて有益であることがわかりました。
http://ruby.about.com/od/advancedruby/a/tainted.htm
「汚染された」オブジェクトとは、ある種のユーザー入力から生じたオブジェクトです。ファイル、キーボード、またはネットワークのいずれかから、オブジェクトがプログラム内のリテラルであるか、プログラムによって直接作成されていない限り、汚染されます。汚染された旗は常にあなたの物にあります、あなたがしなければならないのはあなたが何か危険なことをする前にそれをチェックすることだけです。データが本当に安全であることを確認したら、オブジェクトを汚染しないようにすることができます。