2011-05-24 37 views
14

我有一個web服務,它將認證機器的一些輸入作爲XML(這是一個網絡管理系統,我正在與其他一些軟件進行集成),並執行一些帶有一些XML數據的shell腳本作爲參數。轉義shell命令在java中?

在Java(/ Linux)中,轉義shell命令以確保某人無法將惡意參數傳遞到我的web服務的最佳方法是什麼?

在一個非常簡化的例子

基本上,林通過WS

<foo> 
<bar>ABCDEF</bar> 
</foo> 

then running somescript.pl <<data in <bar> field>> here 

我需要確保這不能被用來執行任意shell命令等採取一些輸入英寸

謝謝!

+0

哪個外殼?不同的炮彈有不同的逃避慣例。 – 2011-05-24 18:56:54

+1

這個問題說明了Linux上的Java。 – 2011-05-24 19:06:07

+1

@Gweebz,它不回答「哪個shell?」的問題。 Linux有許多不同的shell。 – Kaj 2011-05-24 19:09:45

回答

12

我會使用的ProcessBuilder或的方法的Runtime.exec其中貫穿於外殼一個建議,因此不需要外殼轉義避免注入攻擊(在這裏)。

它還可能有利於考慮使用過程中的標準輸入管道來傳輸XML數據的形式 - Perl可以平凡處理從標準輸入讀。命令行參數通常有限制。

快樂編碼。提供

+1

真的是一個明智的答案。如果你以前沒有,我會一個接一個地寫出來。 +1 – gd1 2011-05-24 20:16:03

+0

感謝您的提示,翔實的答案! – Yablargo 2011-05-24 20:56:51

0

如果你不能使用ProcessBuilder,你可以考慮Apache commons-text escapeXSI。 (不要在意這個名稱 - XSI是X/Open System Interfaces Extension,它是對Single UNIX Specification的補充規範,所以所有試圖像UNIX一樣的東西都或多或少地符合這一點)。