由於開發人員編寫源碼,沒有針對代碼中可執行的特殊函數入口做過濾,導致客戶端可以提交惡意構造語句提交,並交由服務器端執行。命令註入攻擊中WEB服務器沒有過濾類似system(),eval(),exec()等函數是該漏洞攻擊成功的最主要原因。
解決方案
1 假定所有輸入都是可疑的,嘗試對所有輸入提交可能執行命令的構造語句進行嚴格的檢查或者控制外部輸入,系統命令執行函數的參數不允許外部傳遞。
2 不僅要驗證數據的類型,還要驗證其格式、長度、範圍和內容。
3 不要僅僅在客戶端做數據的驗證與過濾,關鍵的過濾步驟在服務端進行。
4 對輸出的數據也要檢查,數據庫裏的值有可能會在壹個大網站的多處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點時也要進行安全檢查。
5 在發布應用程序之前測試所有已知的威脅。