我正在處理一個web應用程序,該應用程序有一些爲命令行操作發送參數的api調用。例如,(使用jquery),API調用等:檢測危險的unix命令行元字符
$.get('/api',{
function:function_1,
data:data
},funcion(){},'text')
可能執行類似的命令行:
php a.php data
在這種情況下
,如果數據的內容是"whatever;rm -rf *;"
,兩個命令將是執行
php a.php watever;
rm -rf *;
我不想冒這個風險。
我的問題是沒有檢測到一個字符是數據字符串的一部分,我的問題是知道應該尋找哪些字符?
我添加了一個shell命令元字符列表。請說明哪些字符有風險,以及哪些字符組合(如果有的話)有風險。
注: 來自http://www.fmrib.ox.ac.uk/fslcourse/unix_intro/shell.html
的shell元字符包括:
\/<>! $%^ & * | {} []「'`〜;
注2:可能有其他字符,請,如果你知道另外添加,或評論,我會添加它
注3:我的問題是相似的如果有人在搜索文本框中添加隱藏查詢,但在我的情況下,問題是使用shell命令。爲防止sql注入,你可以看看this。
如果它hepls人,這個問題可能涉及:http://stackoverflow.com/questions/2135558/handling-metacharacters-in-search-strings –
看得那麼清楚:PHP - 有什麼區別escapeshellarg和escapeshellcmd之間?](http://stackoverflow.com/q/1881582/367456)。 – hakre
你使用php端執行命令的功能是什麼?你可以用'pcntl_fork()/ pcntl_exec()'對替換它嗎? – ninjalj