代碼層防御SQL注入的措施有以下這些:
采用強類型語言,如Java、C#等強類型語言幾乎可以完全忽略數字型注入。
盡可能避免使用拼接的動態SQL語句,所有的查詢語句都使用數據庫提供的參數化查詢接口。參數化的語句使用參數而不是將用戶輸入變量嵌入到SQL語句中。
在服務器端驗證用戶輸入的值和類型是否符合程序的預期要求,檢查字段是否為空,要求其長度大于零,不包括行距和后面的空格。或者檢查輸入字段長度是否符合預期要求。
在服務器端對用戶輸入進行過濾。針對非法的HTML字符和關鍵字,可以編寫函數對其進行檢查或過濾。
避免網站顯示SQL錯誤信息,如類型錯誤、字段不匹配等,防止攻擊者利用這些錯誤信息進行一些判斷。
配置可信任的IP接入和訪問,如IPSec,控制哪些機器能夠與數據庫服務器通信。從數據庫服務器上移除所有的示例腳本和應用程序。
不應使用sa、dba或admin等具備數據庫DBA權限的賬戶,為每一個應用程序的數據庫的連接賬戶使用一個專用的最低權限賬戶。如果應用程序僅需要讀取訪問,應將數據庫的訪問限制為只讀。
應用程序盡量使用存儲過程,利用存儲過程,將數據訪問抽象化,使用戶不能直接訪問表或視圖。存儲過程是在大型數據庫系統中,為了完成特定功能或經常使用的一組SQL語句集,經編譯后存儲在數據庫中。存儲過程具有較高的安全性,可以防止SQL注入。不過,如果編寫不當,依然有SQL注入的風險。
回答所涉及的環境:聯想天逸510S、Windows 10。
代碼層防御SQL注入的措施有以下這些:
采用強類型語言,如Java、C#等強類型語言幾乎可以完全忽略數字型注入。
盡可能避免使用拼接的動態SQL語句,所有的查詢語句都使用數據庫提供的參數化查詢接口。參數化的語句使用參數而不是將用戶輸入變量嵌入到SQL語句中。
在服務器端驗證用戶輸入的值和類型是否符合程序的預期要求,檢查字段是否為空,要求其長度大于零,不包括行距和后面的空格。或者檢查輸入字段長度是否符合預期要求。
在服務器端對用戶輸入進行過濾。針對非法的HTML字符和關鍵字,可以編寫函數對其進行檢查或過濾。
避免網站顯示SQL錯誤信息,如類型錯誤、字段不匹配等,防止攻擊者利用這些錯誤信息進行一些判斷。
配置可信任的IP接入和訪問,如IPSec,控制哪些機器能夠與數據庫服務器通信。從數據庫服務器上移除所有的示例腳本和應用程序。
不應使用sa、dba或admin等具備數據庫DBA權限的賬戶,為每一個應用程序的數據庫的連接賬戶使用一個專用的最低權限賬戶。如果應用程序僅需要讀取訪問,應將數據庫的訪問限制為只讀。
應用程序盡量使用存儲過程,利用存儲過程,將數據訪問抽象化,使用戶不能直接訪問表或視圖。存儲過程是在大型數據庫系統中,為了完成特定功能或經常使用的一組SQL語句集,經編譯后存儲在數據庫中。存儲過程具有較高的安全性,可以防止SQL注入。不過,如果編寫不當,依然有SQL注入的風險。
回答所涉及的環境:聯想天逸510S、Windows 10。