命令注入攻擊的常見模式為:僅僅需要輸入數據的場合,卻伴隨著數據同時輸入了惡意代碼,而裝載數據的系統對此並未設計良好的過濾過程,導致惡意代碼也一併執行,最終導致信息泄露或者正常數據的破壞。其中最常見的一類攻擊行為就是針對資料庫系統的SQL(結構化查詢語言)注入。常見的SQL語句構成為:對符合特定條件的數據(某些行的某些列)實施增、刪、改、查等操作。其中需要符合的條件就是所謂“數據”(如學生數據表中性別為女,或年齡大於10歲等),對這些數據的選取以及實施的某種操作就是“指令”。成功的SQL注入攻擊就在於,在輸入數據的時候混雜了其它SQL子句,最終拼接成的SQL語句語法是正確的(資料庫系統對此毫無防備)並得到執行。
SQL注入等命令注入攻擊會造成嚴重的危害,包括:
1、信息泄露,例如資料庫存放的賬戶、密碼等個人機密數據泄露,並且數據結構可能為黑客知曉並進行進一步攻擊。
2、信息泄露,例如資料庫存放的賬戶、密碼等個人機密數據泄露,並且數據結構可能為黑客知曉並進行進一步攻擊。
3、利用資料庫伺服器提供的作業系統命令接口,控制整個系統。
從上面SQL注入攻擊的場景分析來看,對SQL攻擊(以及其它命令注入模式的攻擊)的防範可以從兩個方面著手:
1、套用系統將指令和數據良好隔離,當數據傳輸到系統中即便其中混雜了惡意指令,數據和惡意指令也會被一併視作“數據”,至多造成異常數據不被正確執行,而避免了惡意攻擊。
2、對輸入的數據進行過濾,如果其中混雜著惡意執行則丟棄。
新的注入方式會不斷出現,過濾方式也要隨之更新,有可能會有滯後。因此方案2可以過濾常見的命令注入,但指令和數據的良好隔離才是解決命令注入的根本之道。