
自從我開始編寫 LAMP 應用程式以來,我想為我的盒子開發一個管理控制面板。 (出於娛樂和教育目的,否則我會使用市場上已有的東西)
但總是阻止我的是我總是聽說exec() 函數(我知道實現這一點的唯一方法)是邪惡的......你知道:“不要使用它們”,“這是糟糕的編碼”,等等。
我從未聽說過為此目的有更安全的選擇,所以我的問題是:
有沒有?
在專用 Web 伺服器中執行該應用程式並使用受密碼保護的文檔根目錄還不夠嗎?
嗯,這是我的疑問。
答案1
我認為真正的風險是當您將用戶的輸入混合到其中之一時exec()
。這是大多數風險出現的地方,因為您允許使用者向您提供輸入,當混合到 CLI 中時可能會執行危險的操作,例如;
在文字方塊中插入分號 (
因此,一般來說,以唯讀方式運行命令不會比執行其他操作更危險。
這與您可能更熟悉的 SQL 注入攻擊基本上是相同的問題。
答案2
據我所知(我並不是真正的程式設計師,所以要持保留態度),exec()
呼叫根本不是邪惡的。只是它們分叉了一個新進程,並且由於您正在呼叫系統函數而具有很高的開銷。一般來說,人們建議您在編寫的任何程式/腳本中在內部執行操作,並避免像exec()
.
但是,如果您的目標是在系統上執行命令,則沒有這樣的呼叫就無法做到這一點。當然,存在安全風險,允許隨機用戶在您的伺服器上執行任意命令會帶來麻煩。但是,如果對該伺服器的存取受到嚴格限制,您應該能夠安全地進行存取。
無論如何,主要結論是,exec()
函數本質上並不是壞事,它們只是比在內部做某事更有效率。