Java中如何避免sql注入實例詳解
前言
sql注入是web開發(fā)中最常見的一種安全漏洞。可以用它來從數據庫獲取敏感信息、利用數據庫的特性執(zhí)行添加用戶、導出文件等一系列惡意操作,甚至有可能獲取數據庫乃至系統(tǒng)用戶最高權限。
造成sql注入的原因:
程序沒有有效過濾用戶的輸入,使攻擊者成功的向服務器提交惡意的SQL腳本,程序在接收后錯誤的將攻擊者的輸入作為SQL語句的一部分執(zhí)行,導致原始的查詢邏輯被改變,執(zhí)行了攻擊者精心構造的惡意SQL語句。
如從用戶表根據用戶名admin和密碼123查用戶信息
select * from User where username = 'admin' and password = '123'
攻擊者惡意修改用戶名參數 admin-->xxxx or 1=1 --
select * from user where username = 'xxxx' or 1=1 --and password = '123'
SQL中--是注釋標記,如果上面這個SQL被執(zhí)行,就可以讓攻擊者在不知道任何用戶名和密碼的情況下成功登錄。所以,防止sql注入至關重要
預防sql注入方法:
- 嚴格限制Web應用的數據庫的操作權限,給連接數據庫的用戶提供滿足需要的最低權限,最大限度的減少注入攻擊對數據庫的危害
- 對進入數據庫的特殊字符進行轉義處理,或編碼轉換
- 校驗參數的數據格式是否合法(可以使用正則或特殊字符的判斷)
- 預編譯SQL (Java中使用PreparedStatement),參數化查詢方式,避免SQL拼接
- 使用mybatis的"#{}“預編譯,將傳入的值按照字符串的形式進行處理
- 發(fā)布前,利用工具進行SQL注入檢測
- 報錯信息不要包含SQL信息輸出到 Web 頁面
java 有效的防止SQL注入
1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和雙"-"進行轉換等。
2.永遠不要使用動態(tài)拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝。
總結
到此這篇關于Java中如何避免sql注入的文章就介紹到這了,更多相關Java避免sql注入內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析
這篇文章主要介紹了Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01java?CompletableFuture異步任務編排示例詳解
這篇文章主要為大家介紹了java?CompletableFuture異步任務編排示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11springboot2.6.3讀取不到nacos上的配置文件問題
這篇文章主要介紹了springboot2.6.3讀取不到nacos上的配置文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07