我在docs年前读过关于Ruby字符串方法的书,后来偶然发现了这些方法

  • taint
  • trust
  • untaint
  • untrust

我不知道他们做什么,我们在哪种情况下使用他们?有人用过吗?举个例子就好了.

推荐答案

tainttrust是Ruby安全模型的一部分.在Ruby中,每个对象都带有几个标志,其中两个是受信任标志和受污染标志.这些标志的作用取决于所谓的安全级别.安全级别存储在$SAFE中.

程序中的每个线程和光纤都有自己的安全级别.安全级别从0到4不等,0不强制执行安全性,4强制执行太多安全性,只有当你输入代码时才应该使用.您可以为$SAFE指定一个比其现有值更低的值.此外,在Ruby脚本以setuid形式运行的UNIX系统上,Ruby会自动将安全级别设置为1.

Tainting

当一个对象设置了它的污染标志时,这大致意味着该对象来自不可靠的来源,因此不能用于敏感操作.当安全级别为0时,污染标志将被忽略(但仍然设置,如果需要,您可以关注它).有几种与污染有关的方法:

  • taint--使一个物体受到污染.除了安全级别4,你可以在所有级别上污染一个物体.
  • tainted?--判断物体是否受到污染.
  • untaint--go 除物体上的污染.这可用于安全级别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)

Trust

信任要简单得多.信任与对象是否来自受信任或不受信任的源有关——基本上,它是否来自任何低于安全级别4或安全级别4的源.我不确定Ruby的信任到底有什么影响,但看看这里:


以下是更多资源:

http://www.ruby-forum.com/topic/79295--关于安全是否足够安全.

Ruby相关问答推荐

使用Mac命令行解密用Ruby加密的Zip

Procs的绑定

ruby 中的魔术注释(#Encoding: utf-8)是如何工作的?

如何从 url 获取文件扩展名?

构造Ruby的现代方法是什么?

Ruby 中有内置的二进制搜索吗?

如何在 ruby​​ 中编写负循环,例如 for(i=index; i >= 0; i --)

将参数传递给erb视图

Ruby 中数组和哈希的性能

判断 Ruby HTTP 响应是否成功

如何从最后一个元素开始遍历数组?

Ruby 中的 main是什么?

Ruby - 查看端口是否打开

与 String 相比,在 Ruby 中使用 StringIO 有哪些优势?

有没有办法从该实例内部为 Ruby 类的实例创建方法?

include_examples和it_behaves_like有什么区别?

rbenv install --list 不列出 2.1.2 版本

如何在 jekyll markdown 博客中包含视频

Ruby:define_method 与 def

在 Ruby 中创建二维数组和访问子数组