SQL注入及其防范

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方法進行設置參數

加強對用戶輸入的驗證

其實簡單來說就是去驗證用戶輸入的內容是否正確,拒絕包含二進制數據、轉義序列和注釋字符的輸入內容,驗證輸入內容,只接受需要的內容和需要內數據類型,這樣可以有效的防止注入攻擊

以上
歡迎關注我的知乎:鄭銘
github:github

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容