SQL注入原理以及怎樣避免注入


SQL注入:究竟什么時候會用到SQL呢?回答是訪問數據庫的時候。也就是說SQL注入-->直接威脅到了數據源,呵呵。數據庫都收到了威脅,站點還能正常現實么?

所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串。終於達到欺騙server運行惡意的SQL命令。

詳細來說,它是利用現有應用程序,將(惡意)的SQL命令注入到后台數據庫引擎運行的能力,它能夠通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的站點上的數據庫。而不是依照設計者意圖去運行SQL語句。

[1] 比方先前的非常多影視站點泄露VIP會員password大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別easy受到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的運算規則,從而造成后台腳本邏輯性錯誤
比如管理員的賬號password都是admin。那么再比方后台的數據庫查詢語句是
user=request("user")
passwd=request("passwd")
sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&'''
那么我使用'or 'a'='a來做usernamepassword的話,那么查詢就變成了
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掉password和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示,最好使用自己定義的錯誤信息對原始錯誤信息進行包裝
6.sql注入的檢測方法一般採取輔助軟件或站點平台來檢測。軟件一般採用sql注入檢測工具jsky,站點平台就有億思站點安全平台檢測工具。MDCSOFT SCAN等。採用MDCSOFT-IPS能夠有效的防御SQL注入。XSS攻擊等。
等待試驗........


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM