SQL注入的代碼層防御手段有以下這些:
白名單驗證:白名單驗證是在用戶進一步處理之前驗證輸入是否符合所期望的類型、長度、大小、數字范圍或其他標準。白名單驗證通常利用正則表達式完成,可以從數據類型、數據值、數據范圍、數據內容、數據大小等方面考慮。
黑名單驗證:黑名單驗證是拒絕不良的輸入,如果輸入中包含了惡意內容,則直接拒絕。黑名單驗證要比白名單驗證弱些,因為潛在的不良字符很多,這樣會導致黑名單列表很大,而且很難及時更新。黑名單驗證通常也是利用正則表達式,附加一個禁止使用的字符。
通過代碼過濾防御:SQL注入產生的根本原因是用戶修改了程序員設計的SQL語句結構而導致的。所以,Web服務器端接收的參數,可以利用過濾空格來實現SQL注入防御。對于純中文,過濾掉空格就能夠解決問題,若輸入的是英文字符串,空格本身是用戶輸入內容的一部分,不能隨意刪除。這時候,就要分兩種情況進行處理。
添加數據記錄防御:如果Web應用程序需要從表單中獲取相關數據,然后往后臺數據庫的相關數據表中插入一條新的記錄,程序員可以不直接使用INSERT語句,而通過先打開記錄集對象,然后往記錄集對象中先添加一條空記錄,再將具體的數據內容寫入到記錄字段中,最后直接將記錄集更新到數據庫中。這樣就可以有效避免SQL攻擊,達到防御的目的。
刪除數據防御:如果Web應用程序需要刪除數據記錄,程序員也可以不直接使用DELETE語句,而通過先構造一條查詢語句,打開記錄集對象,然后找到要刪除的數據記錄,將此記錄刪除,再將刪除記錄后的記錄集更新到數據庫中。刪除操作是使用rs.delete語句完成的。這樣就可以有效避免SQL攻擊,達到防御的目的。