1

无法理解在实践中如何使用下面的命令行选项。

-T[level=1]

我试过这段代码:

#commandoptionstest.rb
puts "hello world"

不同SAFE级别:

输出正常

@ubuntu:~/script$ ruby -x commandoptionstest.rb
# => hello world

为什么会出错?我需要做什么才能commandoptionstest.rb允许?-x-T

@ubuntu:~/script$ ruby -x -T commandoptionstest.rb
# => ruby: no -x allowed in tainted mode (SecurityError)

输出来了

@ubuntu:~/script$ ruby -T commandoptionstest.rb
# => hello world

输出来了

@ubuntu:~/script$ ruby -T1 commandoptionstest.rb
# => hello world

输出来了

@ubuntu:~/script$ ruby -T2 commandoptionstest.rb
# => hello world

输出来了

@ubuntu:~/script$ ruby -T3 commandoptionstest.rb
# => hello world

再次为什么错误?

@ubuntu:~/script$ ruby -T4 commandoptionstest.rb
# => commandoptionstest.rb:15:in `write': Insecure operation `write' at level 4 (SecurityError)
#   from commandoptionstest.rb:15:in `puts'
#   from commandoptionstest.rb:15:in `puts'
#   from commandoptionstest.rb:15:in `<main>'

在上面的代码的帮助下,你能解释一下为什么SAFElevels 1, 2,3是打印的"hello world",而SAFElevel4不是吗?要允许SAFElevel的写操作4,这里应该做什么?

4

2 回答 2

2

它设定了$SAFE水平。

这决定了如何处理输入,以及关于环境变量、I/O、线程、异常、解释器命令行参数等的大量其他内容。

http://www.ruby-doc.org/docs/ProgrammingRuby/html/taint.html

IMO 文档是一个很好的起点。如果您对特定行为有疑问,请询问。


要解决您的评论和编辑:

是的,我可以,但文档也可以,而且可能更好。

为什么不-x工作?

因为文档说它不会:

$SAFE >= 1
   * 不允许使用命令行选项 -e、-i、-I、-r、-s、-S 和 -x。

[~]$ ruby​​ --help Usage: ruby​​ [switches] [--] [programfile] [arguments] # elided -T[level=1] 打开污染检查

-T因此,如果没有指定数字,则默认级别是1,这意味着$SAFE >= 1,这正是文档所说的:-x不允许。

为什么不起作用puts

很难说,因为您实际上并没有提供您正在执行的代码,但很可能再次像文档所说的那样:

$SAFE >= 4
   * 不能写入文件或管道。

于 2013-02-13T22:26:48.900 回答
0

perl CGI FAQ比我能更好地解释这一点。基本上,这是一种确保您的参数已被您验证的方法。

于 2013-02-13T22:26:55.950 回答