我讀到有關在docs Ruby的字符串方法來到翻過方法什麼是Ruby的對象#污點和對象#信任方法?
taint
trust
untaint
untrust
我不知道他們做了什麼,我們使用它們的情況是什麼?有沒有人使用過其中的任何一個例子會很好。
我讀到有關在docs Ruby的字符串方法來到翻過方法什麼是Ruby的對象#污點和對象#信任方法?
taint
trust
untaint
untrust
我不知道他們做了什麼,我們使用它們的情況是什麼?有沒有人使用過其中的任何一個例子會很好。
taint
和trust
是Ruby安全模型的一部分。在Ruby中,每個對象都帶有幾個標誌,它們中有兩個是Trusted標誌和Tainted標誌。這些標誌如何起作用取決於所謂的安全級別。安全級別存儲在$SAFE
中。
程序中的每個線程和光纖都可以擁有自己的安全級別。安全級別範圍從0到4,0強制執行沒有安全性,4強制執行非常多,只能在您使用eval
代碼時使用。你不能分配一個較低的值到$SAFE
比它已經有。此外,在其中一個Ruby腳本運行作爲setuid UNIX系統中,紅寶石會自動將安全級別設置爲1
當一個對象有它的污點標誌設置,這意味着,粗略,該對象是從哪裏來的一個不可靠的來源,因此不能用於敏感操作。當安全級別爲0時,污染標誌被忽略(但仍然設置,如果你願意,可以注意它)。有幾種方法與污點有關:
taint
- 使對象變髒。除了安全級別4,您可以在所有級別上污染對象。tainted?
- 檢查對象是否受污染。untaint
- 從對象中移除污點。這可以只有用於安全級別0,1和2。下面是來自pragprog鎬(source)的示例,說明污點:
# 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表單數據。然後實施清理方法,確保對象在代碼中的其他地方使用之前是安全的並將它們解除。另請參閱「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
好的,我們有沒有在某些情況下使用它,你有沒有機會混淆它。詞安全本身使它更有趣:) – PriteshJ
我沒有與他們合作,但我可能會很快給出答案。這是我在哪裏的夜晚,所以也許在早上。 – Linuxios