2011-11-01 45 views
0

我正在處理一個web應用程序,該應用程序有一些爲命令行操作發送參數的api調用。例如,(使用jquery),API調用等:檢測危險的unix命令行元字符

$.get('/api',{ 
function:function_1, 
data:data 
},funcion(){},'text') 

可能執行類似的命令行:

php a.php data 
在這種情況下

,如果數據的內容是"whatever;rm -rf *;",兩個命令將是執行

  1. php a.php watever;
  2. rm -rf *;

我不想冒這個風險。

我的問題是沒有檢測到一個字符是數據字符串的一部分,我的問題是知道應該尋找哪些字符?

我添加了一個shell命令元字符列表。請說明哪些字符有風險,以及哪些字符組合(如果有的話)有風險。


注: 來自http://www.fmrib.ox.ac.uk/fslcourse/unix_intro/shell.html

的shell元字符包括:

\/<>! $%^ & * | {} []「'`〜;

注2:可能有其他字符,請,如果你知道另外添加,或評論,我會添加它

注3:我的問題是相似的如果有人在搜索文本框中添加隱藏查詢,但在我的情況下,問題是使用shell命令。爲防止sql注入,你可以看看this

+1

如果它hepls人,這個問題可能涉及:http://stackoverflow.com/questions/2135558/handling-metacharacters-in-search-strings –

+0

看得那麼清楚:PHP - 有什麼區別escapeshellarg和escapeshellcmd之間?](http://stackoverflow.com/q/1881582/367456)。 – hakre

+0

你使用php端執行命令的功能是什麼?你可以用'pcntl_fork()/ pcntl_exec()'對替換它嗎? – ninjalj

回答

3

你好得多試圖定義在輸入中允許哪些字符被允許爲,並檢查輸入是否只包含這些字符,即「白名單」方法。

+0

與其他人打電話,我不能。 –

相關問題