2013-02-13 22 views
1

無法理解在實踐中如何使用以下命令行選項。無法理解在實踐中如何使用命令行選項「-T」

-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>' 

與上面的代碼的幫助,請你解釋爲什麼SAFE水平123打印"hello world",而4SAFE水平呢?要允許SAFE級別4的寫入操作,這裏應該做什麼?

+0

你沒有看到你重複的問題嗎? – hd1 2013-02-13 22:27:44

+0

@ hd1 IMO這不是一個騙局,因爲'-T'影響的不僅僅是對象污點。 – 2013-02-13 22:29:40

+2

請停止投票結束重複:不是。相關問題特別針對污點對象提出問題。 '-T'命令行選項設置了Ruby解釋器的'$ SAFE'級別,它比簡單地定義是否,以及何時以及什麼時候對象被污染了更多。 – 2013-02-13 23:21:38

回答

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是不允許的。

[〜] $紅寶石--help 用法:紅寶石[交換機] [ - ] [programfile] [參數] #消隱 -T [級別= 1]打開污點檢查

因此,如果-T被指定爲沒有編號的默認級別是1,這意味着$SAFE >= 1,這意味着文檔說的是:-x是不允許的。

爲什麼puts不工作?

很難說,因爲你沒有實際提供你執行的代碼,但最有可能的,同樣,作爲文檔說:

$ SAFE> = 4
      *無法寫入文件或管道。

+0

是否可以使用IRB類型的小片段來查看哪些級別會影響代碼中使用'-T'選項的方式? – 2013-02-13 22:34:32

+0

@ user2060534一個詳盡的例子可能是數百行 - IMO完整答案超出範圍。請查看提供的文檔,並將問題縮小到特定行爲 - 子彈點列表包含超過三十種特定行爲。 – 2013-02-13 22:36:15

+0

實際上令我困惑的是 - 我想看到說 - 如果我沒有將'SAFE'級別定義爲'2' - 那麼會發生什麼情況,如果定義那麼它如何確保安全? – 2013-02-13 22:42:15

0

The perl CGI FAQ確實比我這個解釋的一個更好的工作。基本上,這是確保您的參數得到您驗證的一種方法。

+0

但是,Ruby僅部分有用,因爲很多情況會發生在Ruby和安全級別上。 – 2013-02-13 22:28:37

+0

A [重複問題](http://stackoverflow.com/questions/1736161/whats-the-purpose-of-tainting-ruby-objects),不過 – hd1 2013-02-13 22:29:54

+0

@DaveNewton我同意你的看法。我標記的問題沒有完全回答我的問題。 – 2013-02-13 22:31:19