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