首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法理解Ruby中的Object#taint和Object#trust之间的区别

无法理解Ruby中的Object#taint和Object#trust之间的区别
EN

Stack Overflow用户
提问于 2013-03-09 14:23:50
回答 1查看 133关注 0票数 1

下面的Object#methods彼此有何不同?

  • 污点与信任
  • 不玷污和不信任
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-09 14:36:47

备注:正如@themarketka所指出的,在Ruby2.2.2中,信任已被废弃,等同于污染。

这种差异是相当奇怪的,而且没有特别详细的记录。

注意:在$SAFE级别0,这些标记都没有做任何事情。

玷污

污染的概念是一个对象是否来自一个可信的来源。从标准输入输入的字符串被污染,但是刚刚分配的字符串不会被污染。在较高的安全级别上,禁止对受污染的数据进行各种潜在的危险操作(抛出SecurityException)。此外,还可以从所谓的“子”对象继承evalsystem等操作:

代码语言:javascript
复制
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上起作用,这些级别几乎完全用于沙箱外部代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15311746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档