2011-03-14 108 views

回答

3

正如我在另一個答案的評論(也可以添加我自己的答案)中提到的,只要你控制第一個參數,這應該是安全的。

+0

感謝您的答案。它認爲你的觀點是正確的,只要第一個參數得到控制,它應該是安全的。我需要進一步調查。 – 2011-03-14 18:18:54

2

一般來說,這是不是安全的,因爲它應該可以執行shell腳本(這可能是惡意的)。

我會允許一組預定義,你知道,並讓用戶選擇其中的一個(有可能以某種方式逃脫可選參數),而不是使之完全進入命令的命令。

+0

@Thomas謝謝你的回答。我已經在做那樣的事情了。數組的第一個元素總是由我定義,但我仍然不確定用戶是否可以在任何操作系統中執行類似[「MyProcess」,「expected parameter&rm -Rf *」]或其他命令的操作。 – 2011-03-14 16:44:32

+0

@Jose - 如果你控制第一個參數並使用String [] exec方法,那麼你應該是安全的(假設你正在運行的程序不會對它獲取的參數做任何不安全的事情)。 – jtahlborn 2011-03-14 16:52:33

+0

那麼,你不能確定任何操作系統,但是你可以使用'expected parameter&rm -Rf *' - >''expected parameter&-RF *'''引用來引用參數。從shell的角度來看),即使用平臺相關的轉義表達式替換所有現有的引號,然後用額外的引號包裝參數。轉義可能取決於平臺,但如果您添加對最常見平臺的支持,則應該沒問題。 – Thomas 2011-03-14 17:00:53

1

我認爲這種情況下的安全性是由底層操作系統訪問控制定義的。如果您使用的是unix並以有限的用戶身份運行腳本,那麼您應該沒問題。所以只要正確定義了訪問控制並且腳本以具有正確權限的用戶身份運行,那就沒有問題。 (但有什麼用例讓你寫這樣的程序。)

+0

感謝您的回答。我使用unix來測試項目,但是當我的部分完成時,它將不在我的手中,因此它可以部署在Windows或其他操作系統中。我無法控制它是否會以正確的權限正確部署,這就是我所害怕的。如果我可以從代碼中控制代碼注入,我會更放心。 – 2011-03-14 16:51:47

1

所有這些評論似乎都缺少一個重要的事實。命令注入只是使用exec自定義參數的危險之一。另一種可能的攻擊是參數注入。您需要了解您讓用戶致電的命令的所有可能參數。

找到一個危險命令的例子。用戶可以添加選項-exec作爲參數以獲得任意的命令執行。

相關問題