我寫的,我用幾個thirdy黨的命令調用它們與在PHP中exec
功能的Web應用程序執行命令(例如,我通過一個命令行程序,使乳膠公式)。安全從PHP
我的問題是:什麼是在PHP執行外部命令行程序的安全問題?我必須知道的是什麼?你可以給我一個檢查點的清單嗎?
編輯:我知道,我必須清理用戶的輸入,以防止執行任意命令...是否有任何其他的東西來檢查?
在此先感謝。
我寫的,我用幾個thirdy黨的命令調用它們與在PHP中exec
功能的Web應用程序執行命令(例如,我通過一個命令行程序,使乳膠公式)。安全從PHP
我的問題是:什麼是在PHP執行外部命令行程序的安全問題?我必須知道的是什麼?你可以給我一個檢查點的清單嗎?
編輯:我知道,我必須清理用戶的輸入,以防止執行任意命令...是否有任何其他的東西來檢查?
在此先感謝。
請謹慎地使用escapeshellarg()轉義您可能會輸入命令的任何傳入數據。
使用您選擇的可執行文件的絕對路徑可以最大限度地降低PHP腳本調用錯誤文件的風險。
除此之外,我沒有看到其他一些答案中的大驚小怪 - 畢竟,你不是在討論讓用戶執行任意命令。 (糾正我,如果我錯了。)一般來說,執行PHP的外部命令是一個非常好的安全明智的海事組織。
您需要注意的是,您調用的程序與PHP用戶的權限一起運行,並且可能不被允許執行所有操作,但是我認爲您已經知道這一點。
如果其他人被允許在基本路徑來安裝程序,你可能會發現自己不執行你所期望的。
記住你與你的權限執行這些程序,所以如果他們以某種方式改變了,您的帳戶可能會受到影響。
如何使用沒有清潔你的用戶輸入,使他們能夠執行任何他們喜歡的命令,如格式;-)
最大的問題是,你將能夠執行幾乎所有的系統命令。因此,至少需要確保由用戶提供並在exec命令中使用的任何輸入已正確轉義和驗證。
這篇文章有一個很好的解釋:
你要注意這些事情:
針對漏洞的安全機制是:命令,參數和文件/路徑名的
驗證exec的輸入被極度低估。有很多可能性來濫用你無法想象的命令(基本的例子,你有沒有關於過濾管道和重定向?)。
我會建議在某些安全沙箱中的exec中運行這些命令,以使您的操作系統不可見。但是,請記住,這是非常困難的,因爲PHP將在您的操作系統中運行。
我強烈建議逃跑。在命令行上轉儲不可信的數據有點冒險。更好地啓動具有固定參數的外部程序並將數據傳遞給它。您可能還需要爲PHP解釋器提供比您想要的更多的權限,或者讓程序設置爲whatsit-bit,這兩者都不會特別吸引我。