什么是注入攻擊?從具體的SQL注入說?
重點看這條SQL,密碼輸入: ' OR '1'='1時,等同于不需要密碼
如何解決注入攻擊,比如SQL注入?
1. 使用預(yù)編譯處理輸入?yún)?shù):要防御 SQL 注入,用戶的輸入就不能直接嵌套在 SQL 語句當(dāng)中。使用參數(shù)化的語句,用戶的輸入就被限制于一個參數(shù)當(dāng)中, 比如用prepareStatement
2. 輸入驗證:檢查用戶輸入的合法性,以確保輸入的內(nèi)容為正常的數(shù)據(jù)。數(shù)據(jù)檢查應(yīng)當(dāng)在客戶端和服務(wù)器端都執(zhí)行,之所以要執(zhí)行服務(wù)器端驗證,是因為客戶端的校驗往往只是減輕服務(wù)器的壓力和提高對用戶的友好度,攻擊者完全有可能通過抓包修改參數(shù)或者是獲得網(wǎng)頁的源代碼后,修改驗證合法性的腳本(或者直接刪除腳本),然后將非法內(nèi)容通過修改后的表單提交給服務(wù)器等等手段繞過客戶端的校驗。因此,要保證驗證操作確實已經(jīng)執(zhí)行,唯一的辦法就是在服務(wù)器端也執(zhí)行驗證。但是這些方法很容易出現(xiàn)由于過濾不嚴(yán)導(dǎo)致惡意攻擊者可能繞過這些過濾的現(xiàn)象,需要慎重使用。
3. 錯誤消息處理:防范 SQL 注入,還要避免出現(xiàn)一些詳細(xì)的錯誤消息,惡意攻擊者往往會利用這些報錯信息來判斷后臺 SQL 的拼接形式,甚至是直接利用這些報錯注入將數(shù)據(jù)庫中的數(shù)據(jù)通過報錯信息顯示出來。
4. 加密處理:將用戶登錄名稱、密碼等數(shù)據(jù)加密保存。加密用戶輸入的數(shù)據(jù),然后再將它與數(shù)據(jù)庫中保存的數(shù)據(jù)比較,這相當(dāng)于對用戶輸入的數(shù)據(jù)進(jìn)行了“消毒”處理,用戶輸入的數(shù)據(jù)不再對數(shù)據(jù)庫有任何特殊的意義,從而也就防止了攻擊者注入 SQL 命令。
還有哪些注入?
1. xPath注入,XPath 注入是指利用 XPath 解析器的松散輸入和容錯特性,能夠在 URL、表單或其它信息上附帶惡意的 XPath 查詢代碼,以獲得權(quán)限信息的訪問權(quán)并更改這些信息
2. 命令注入,Java中System.Runtime.getRuntime().exec(cmd);可以在目標(biāo)機(jī)器上執(zhí)行命令,而構(gòu)建參數(shù)的過程中可能會引發(fā)注入攻擊
3. LDAP注入
4. CLRF注入
5. email注入
6. Host注入