1.什么是SQL注入
在java中無論是使用orm框架還是直接使用JDBC操作數據庫我們經常都會碰到拼接字符串的情況,例如以下:
String sql = "select * from tableA where username = " + username + ";";
那么操作輸入的字符串username來修改我們的操作數據庫語句例如
username = "zhengming; drop table tableB";
那么執行本條語句后tableB表將會被刪除,這就是我們常說的SQL注入攻擊
2.如何防范
說完了什么是SQL攻擊后那么久要說說如何進行防范,主要的防范方法有以下幾種:
- 嚴格區分普通用戶權限與管理用戶權限
- 使用參數化語句(即使用占位符)
- 加強對用戶輸入內容的驗證
- 使用專業的軟件對SQL漏洞進行掃描
以下將對前三種防范措施進行說明
嚴格區分普通用戶權限與管理員權限
對于普通用戶即應用使用者一般只給予讀取權限和部分寫權限,至于刪除表和刪除數據庫這樣的權限應當予以限制,而對于數據庫管理員來說就應當給予更高的權限以便維護數據庫
使用參數化語句
無論使用orm框架還是直接使用JDBC操作數據庫,只要稍微了解應該都知道占位符?的用處即代表此處為一個參數,通過后期設置的方式進行填充
String sql = "select * from tableA where username = ?;"
而后通過set方法進行設置參數
加強對用戶輸入的驗證
其實簡單來說就是去驗證用戶輸入的內容是否正確,拒絕包含二進制數據、轉義序列和注釋字符的輸入內容,驗證輸入內容,只接受需要的內容和需要內數據類型,這樣可以有效的防止注入攻擊