我有一個PHP腳本需要執行程序,該程序可以處理名稱中有空格的文件。大多數用於執行外部命令的PHP函數(例如exec()
)需要1個字符串參數才能執行命令行。但是,您必須執行諸如escapeshellarg()
之類的操作才能確保您的輸入安全。通過傳遞數組來執行外部命令,文件名中有空格
有什麼方法可以在PHP中用數組執行外部命令。因此,而不是:
exec("ls -l ".escapeshellarg($filename));
我可以去:
exec(array("ls", "-l", $filename));
這意味着我不必擔心逃避爭論。我想避免使用escapeshellarg()
,因爲我使用的版本有一個刪除非ASCII字符的錯誤。
Java有此功能http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String[]%29
我知道這很明顯,但對於任何其他人來說:從不根據用戶輸入運行外部命令。如果該腳本不在任何Web服務器上,那麼很好,但除此之外,請確保您檢查,仔細檢查並再次檢查5次,以致任何人都無法使用此腳本執行任何不應該執行的命令。 – Matchu 2010-01-23 18:05:46