2010-05-04 88 views
0

我寫的,我用幾個thirdy黨的命令調用它們與在PHP中exec功能的Web應用程序執行命令(例如,我通過一個命令行程序,使乳膠公式)。安全從PHP

我的問題是:什麼是在PHP執行外部命令行程序的安全問題?我必須知道的是什麼?你可以給我一個檢查點的清單嗎?

編輯:我知道,我必須清理用戶的輸入,以防止執行任意命令...是否有任何其他的東西來檢查?

在此先感謝。

回答

3

請謹慎地使用escapeshellarg()轉義您可能會輸入命令的任何傳入數據。

使用您選擇的可執行文件的絕對路徑可以最大限度地降低PHP腳本調用錯誤文件的風險。

除此之外,我沒有看到其他一些答案中的大驚小怪 - 畢竟,你不是在討論讓用戶執行任意命令。 (糾正我,如果我錯了。)一般來說,執行PHP的外部命令是一個非常好的安全明智的海事組織。

您需要注意的是,您調用的程序與PHP用戶的權限一起運行,並且可能不被允許執行所有操作,但是我認爲您已經知道這一點。

0

如果其他人被允許在基本路徑來安裝程序,你可能會發現自己不執行你所期望的。

記住你與你的權限執行這些程序,所以如果他們以某種方式改變了,您的帳戶可能會受到影響。

0

如何使用沒有清潔你的用戶輸入,使他們能夠執行任何他們喜歡的命令,如格式;-)

2

你要注意這些事情:

  • 非固定的命令,這意味着應該提供的命令,用戶輸入只應該是參數,如果有的話。
  • 誘使命令執行其他命令的參數。分號+命令名稱是可能的選擇。
  • 轉義字符,將欺騙EXEC成執行其他命令。
  • 用戶上傳的內容將使命令直接(通過某種模板,包含或鏈接機制)執行其他命令,或通過被調用命令中的安全漏洞(內存泄漏,堆棧溢出等)間接執行。
  • 參數中的相對路徑。總是嘗試將它們轉換爲絕對路徑並與允許的路徑列表進行比較。

針對漏洞的安全機制是:命令,參數和文件/路徑名的

  • 嚴格的白名單。
  • 以特權用戶的身份運行該命令。
  • 在chroot監獄裏沙盒命令。
0

驗證exec的輸入被極度低估。有很多可能性來濫用你無法想象的命令(基本的例子,你有沒有關於過濾管道和重定向?)。

我會建議在某些安全沙箱中的exec中運行這些命令,以使您的操作系統不可見。但是,請記住,這是非常困難的,因爲PHP將在您的操作系統中運行。

0

我強烈建議逃跑。在命令行上轉儲不可信的數據有點冒險。更好地啓動具有固定參數的外部程序並將數據傳遞給它。您可能還需要爲PHP解釋器提供比您想要的更多的權限,或者讓程序設置爲whatsit-bit,這兩者都不會特別吸引我。