下面的Object#methods彼此有何不同?
发布于 2013-03-09 14:36:47
备注:正如@themarketka所指出的,在Ruby2.2.2中,信任已被废弃,等同于污染。
这种差异是相当奇怪的,而且没有特别详细的记录。
注意:在$SAFE级别0,这些标记都没有做任何事情。
玷污
污染的概念是一个对象是否来自一个可信的来源。从标准输入输入的字符串被污染,但是刚刚分配的字符串不会被污染。在较高的安全级别上,禁止对受污染的数据进行各种潜在的危险操作(抛出SecurityException)。此外,还可以从所谓的“子”对象继承eval、system等操作:
2.0.0p0 :001 > s = "Hi!"
=> "Hi!"
2.0.0p0 :002 > s.taint
=> "Hi!"
2.0.0p0 :003 > (s + "World").tainted?
=> true因此,如果我在更高的安全级别上执行system("rm -rf #{gets.chomp}") (不执行)之类的操作,Ruby会抱怨我的未污染字符串("rm -rf #{...}")和受污染字符串(gets.chomp)的组合会创建一个受污染的字符串。
信任
与污染不同,信任适用于代码和对象。所有正在运行的代码要么是可信的,要么是不可信的,所有对象都是可信的或不可信的。不可信代码只能修改不受信任的对象。不可信代码只能创建不受信任的对象。在安全级别0-2创建的代码和对象是可信的,但是在$SAFE级别3或4运行或创建的任何代码和对象都是不受信任的,并且只能修改不受信任的对象。
差异
污点和信任之间的区别是微妙的。污染是关于您可以对数据进行哪些操作,而信任则是关于您可以访问哪些数据。它们保护系统的不同部分。此外,虽然污染始终存在,并且受污染的对象可以在任何安全级别上存在,但信任只在所谓的“沙箱”$SAFE级别3和4上起作用,这些级别几乎完全用于沙箱外部代码。
https://stackoverflow.com/questions/15311746
复制相似问题