漏洞原理
由於開發人員編寫源碼,沒有針對代碼中可執行的特殊函式入口做過濾,導致客戶端可以提交惡意構造語句提交,並交由伺服器端執行。命令注入攻擊中WEB伺服器沒有過濾類似system(),eval(),exec()等函式是該漏洞攻擊成功的最主要原因。
漏洞實例
<?php
$log_string =$_GET[‘log’];
system("echo \"".date("Y-m-d H:i:s ")." ".$log_string."\" >> /logs/".$pre."/".$pre.".".date("Y-m-d").".log");}
?>
惡意用戶只需要構造xxx.php?log="id"形式的URL,即可通過瀏覽器在遠程伺服器上執行任意系統命令
解決方案
·建議假定所有輸入都是可疑的,嘗試對所有輸入提交可能執行命令的構造語句進行嚴格的檢查或者控制外部輸入,系統命令執行函式的參數不允許外部傳遞。
·不僅要驗證數據的類型,還要驗證其格式、長度、範圍和內容。
·不要僅僅在客戶端做數據的驗證與過濾,關鍵的過濾步驟在服務端進行。
·對輸出的數據也要檢查,資料庫里的值有可能會在一個大網站的多處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點時也要進行安全檢查。
·在發布應用程式之前測試所有已知的威脅。