概念
SQL注入即通過WEB表單域插入非法SQL指令,當伺服器端構造SQL時采用拼接形式,非法SQL與正常SQL一并構造并在資料庫中執行。
簡單的SQL注入的例子:
例1:test123456 or 1=1;
加上or 1=1,如果沒有防止SQL注入,這樣攻擊者就能成功登入。
例2:test123456';drop table xxx--
這樣會删除一個表,--後面的就是注釋
防禦手段
1、禁止采用SQL拼接的形式
這也是最重要的一點,要采用參數化的形式。如mybatis參數占位符要使用##,它會給參數預設帶上單引号,所有輸入輸入的字元當作一個參數來處理,而不是指令,不要使用$$,它不會帶單引号有SQL注入的風險。
2、過濾或轉義特殊字元
特殊字元包括如:單引号、杠等,或者使用正規表達式過濾如drop table、delete..、update..等危害資料庫安全的請求,前後端都要采用措施。
3、資料庫使用者權利最小化
不要使用最大權限的管理者進行連接配接,為每個應用使用獨立的所在庫的賬号進行連接配接,這樣使權利最小化。
4、發生異常不要使用錯誤回顯,
即顯示預設的伺服器500錯誤,把代碼及表名資訊直白顯示在網頁上,這樣攻擊者就能通過惡意操作使網頁出現500錯誤進而看到資料庫表名等内部資訊。
5、加密存儲敏感資訊
使用者敏感資訊如身份證、手機号、郵箱、卡号等一定要加密存儲,而且要妥善保密密鑰。
關注公衆号Java技術棧回複"面試"擷取我整理的2020最全面試題及答案。