1. 程式人生 > >SQL注入原理以及如何避免注入

SQL注入原理以及如何避免注入

SQL注入:到底什麼時候會用到SQL呢?回答是訪問資料庫的時候,也就是說SQL注入-->直接威脅到了資料來源,呵呵,資料庫都收到了威脅,網站還能正常現實麼?

所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程式,將(惡意)的SQL命令注入到後臺資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。[1]比如先前的很多影視網站洩露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到

SQL注入式攻擊

根據相關技術原理,SQL注入可以分為平臺層注入和程式碼層注入。前者由不安全的資料庫配置或資料庫平臺的漏洞所致;後者主要是由於程式設計師對輸入未進行細緻地過濾,從而執行了非法的資料查詢。基於此,SQL注入的產生原因通常表現在以下幾方面:①不當的型別處理;②不安全的資料庫配置;③不合理的查詢集處理;④不當的錯誤處理;⑤轉義字元處理不合適;⑥多個提交處理不當。

注入方法:

1.猜表名,列名等

先猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
或者也可以這樣
and exists (select * from 表名)
and exists (select 列名 from 表名)
返回正確的,那麼寫的表名或列名就是正確

2.後臺身份驗證繞過漏洞
驗證繞過漏洞就是'or'='or'後臺繞過漏洞,利用的就是AND和OR的運算規則,從而造成後臺指令碼邏輯性錯誤
例如管理員的賬號密碼都是admin,那麼再比如後臺的資料庫查詢語句是
user=request("user")
passwd=request("passwd")
sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&'''
那麼我使用'or 'a'='a來做使用者名稱密碼的話,那麼查詢就變成了
select admin from adminbate where user=''or 'a'='a' and passwd=''or 'a'='a'
這樣的話,根據運算規則,這裡一共有4個查詢語句,那麼查詢結果就是 假or真and假or真,先算and 再算or,最終結果為真,這樣就可以進到後臺了

如何預防 呢?歸納一下,主要有以下幾點:

1.永遠不要信任使用者的輸入。對使用者的輸入進行校驗,可以通過正則表示式,或限制長度;對單引號和 雙"-"進行轉換等。 2.永遠不要使用動態拼裝sql,可以使用引數化的sql或者直接使用儲存過程進行資料查詢存取。 3.永遠不要使用管理員許可權的資料庫連線,為每個應用使用單獨的許可權有限的資料庫連線。 4.不要把機密資訊直接存放,加密或者hash掉密碼和敏感的資訊。 5.應用的異常資訊應該給出儘可能少的提示,最好使用自定義的錯誤資訊對原始錯誤資訊進行包裝 6.sql注入的檢測方法一般採取輔助軟體或網站平臺來檢測,軟體一般採用sql注入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。MDCSOFT SCAN等。採用MDCSOFT-IPS可以有效的防禦SQL注入,XSS攻擊等。 等待試驗........