2012-07-04 62 views
0

所以我有這個現有命令接受單個參數,但我需要的東西,而不是stdin接受參數。從標準輸入到shell的任意輸入

像下面這樣的shell腳本包裝工作,但是因爲我將允許不可信用戶在stdin上傳遞任意字符串,所以我想知道是否有人可能在shell上執行任意命令。

#!/bin/sh 
$CMD "`cat`" 

顯然,如果$ CMD中有處理有什麼我可以做參數的方式中的漏洞,所以我很擔心這樣的東西:

  • 不知怎的,使用戶能夠轉義雙報價和通過輸入參數的$ CMD
  • #2不知何故導致另一個arbitary命令來運行

回答

0

參數看起來好像沒什麼問題,但該命令可能會有點SHAK如果它可以有空間的話。另外,如果你正在尋找從用戶那裏獲取只有一條線路,那麼你可能會喜歡這樣的:如果"$(cmd)"可能會擴大到多個字

#!/bin/bash 

read line 
exec "$CMD" "$line" 
+0

是好點$ CMD,雖然我只是用於說明目的(這將是我的生產代碼中的文字)。 數據中可能有多行,所以我不能做這樣的閱讀。 – jdeuce

0

大量的代碼將被打破。

+0

我擔心的部分是 「'cat'」 $ CMD是無關緊要的(hm – jdeuce

+0

我的意思是'cat',我只是概括了答案,把反引號改爲$(),所以它可能在一個合適的代碼標籤,你現在已經看到了這個問題。 – lynxlynxlynx