2015-03-02 61 views
0

嘗試使用PHP實現自動建議。用awk使用PHP變量爲awk正則表達式命令

$input= $_GET["term"]; 
    $suggest=array(); 
    exec('awk \'BEGIN{FS=","}/.$input./{print $2,"-cost-",$1}\' 3.txt',$suggest); 
    echo json_encode($suggest) 

到位$輸入測試自動提示的我使用的是charachrecter eg.A生成自動提示列表,做工精細。但是我無法將動態角色作爲awk的輸入。 。$ input有些問題。無法弄清楚如何寫的轉義字符

在此先感謝

+0

你確定用GET參數代入shell命令unsanitized是個好主意嗎?如果我去你的網站並通過'term ='; rm -Rf /#',你不太可能會喜歡這個結果。 – Wintermute 2015-03-02 19:59:22

回答

1

打開

exec('awk \'BEGIN{FS=","}/.$input./{print $2,"-cost-",$1}\' 3.txt',$suggest); 

分爲:自

exec('awk \'BEGIN{FS=","}/'.$input.'/{print $2,"-cost-",$1}\' 3.txt',$suggest); 

你忘了終止第一',這是必需的,您無法在單引號字符串內展開變量。

備註:正如評論中指出的那樣,您可能想要盲目地接受GET參數作爲shell命令,而沒有進行某種安全檢查。用戶可以並且將很快找到一種方法來利用這個漏洞...

+0

我認爲一個更好的解決方案是在執行調用之前調用'putenv(「input = $ input」)'並用'exec('awk -F,-v input =「$ input」\ '$ 0〜input {print $ 2,「-cost-」,$ 1} \'3.txt',$ suggest)'或者更好的是,使用'proc_open'來做同樣的事情。免責聲明:代碼未經測試,生鏽的php-fu。 – Wintermute 2015-03-02 20:07:03

+0

感謝您的及時回覆。 @Wintermute能否請你提供一些關鍵詞,以便更多地瞭解安全檢查 – user1869714 2015-03-03 14:30:34

+0

@ user1869714是的我傾向於同意Wintermute的評論。由於我對PHP非常生疏,因此我不會試圖用任何進一步的建議來破壞答案,但請仔細研究一下。 – 2015-03-03 17:27:01