是否有(相對)安全的方法從網路執行 CLI 命令?

是否有(相對)安全的方法從網路執行 CLI 命令?

自從我開始編寫 LAMP 應用程式以來,我想為我的盒子開發一個管理控制面板。 (出於娛樂和教育目的,否則我會使用市場上已有的東西)

但總是阻止我的是我總是聽說exec() 函數(我知道實現這一點的唯一方法)是邪惡的......你知道:“不要使用它們”,“這是糟糕的編碼”,等等。

我從未聽說過為此目的有更安全的選擇,所以我的問題是:

有沒有?

在專用 Web 伺服器中執行該應用程式並使用受密碼保護的文檔根目錄還不夠嗎?

嗯,這是我的疑問。

答案1

我認為真正的風險是當您將用戶的輸入混合到其中之一時exec()。這是大多數風險出現的地方,因為您允許使用者向您提供輸入,當混合到 CLI 中時可能會執行危險的操作,例如;在文字方塊中插入分號 (

因此,一般來說,以唯讀方式運行命令不會比執行其他操作更危險。

這與您可能更熟悉的 SQL 注入攻擊基本上是相同的問題。

答案2

據我所知(我並不是真正的程式設計師,所以要持保留態度),exec()呼叫根本不是邪惡的。只是它們分叉了一個新進程,並且由於您正在呼叫系統函數而具有很高的開銷。一般來說,人們建議您在編寫的任何程式/腳本中在內部執行操作,並避免像exec().

但是,如果您的目標是在系統上執行命令,則沒有這樣的呼叫就無法做到這一點。當然,存在安全風險,允許隨機用戶在您的伺服器上執行任意命令會帶來麻煩。但是,如果對該伺服器的存取受到嚴格限制,您應該能夠安全地進行存取。

無論如何,主要結論是,exec()函數本質上並不是壞事,它們只是比在內部做某事更有效率。

相關內容