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

來源:互聯網
上載者:User

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

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.