輸入驗證:
- 檢查用戶輸入的合法性,確信輸入的內容只包含合法的數據。數據檢查應當在客戶端和服務器端都執行服務器端驗證,是為了彌補客戶端驗證機制脆弱的安全性。
- 輸入驗證最好使用“白名單”校驗的方式。
輸入轉義:
- 每個DBMS都有一個字符轉義機制來告知DBMS輸入的是數據而不是代碼,如果將用戶的輸入都進行轉義,那么DBMS就不會混淆數據和代碼,也不會出現SQL注入了。
最小權限法:
- 把每個數據庫用戶的權限盡可能縮小,在給用戶權限時是基於用戶需要什么樣的權限。而不是用戶不需要什么樣的權限。
參數化查詢:
- 在使用參數化查詢的情況下,數據庫服務器不會將參數的內容視為SQL指令的一部分來處理,而是在數據庫完成SQL指令的編譯后,才套用參數運行,因此就算參數中含有惡意的指令,由於已經編譯完成,就不會被數據庫所運行。(這個方法目前被視為最有效可預防SQL注入攻擊的防御方式)
錯誤消息處理:
- 防范SQL注入,還要避免出現一些詳細的錯誤消息,這些錯誤消息可能會暴露一些敏感信息被攻擊者利用。
加密處理:
- 將用戶登錄名稱,密碼等數據加密保存。加密用戶輸入的數據,然后再將它與數據庫中保存的數據比較,這相當於對用戶輸入的數據進行了“消毒”處理,用戶輸入的數據不再對數據庫有任何特殊的意義,從而防止了攻擊者注入的SQL命令。