認識安全測試之SQL注入

前言html

在桌面軟件的客戶查詢輸入框輸入特殊字符,竟然發現有sql注入漏洞。因此,決定把這個知識點捋一捋。正則表達式

 

什麼是SQL注入sql

提起概念,直接拿百度百科的解釋先有個初步理解吧。數據庫


摘自百度百科:安全

「所謂SQL注入式×××,就是輸入域或頁面請求的查詢字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或做爲存儲過程的輸入參數,這類表單特別容易受到SQL注入式×××。」服務器


從上面的解釋不難發現,SQL注入就是經過構造特定的輸入,提交到服務器後,欺騙服務器執行惡意的SQL命令,這是從×××者角度考慮的。若是是從防護者角度,在產品發佈前就須要進行安全測試,對可能存在SQL的漏洞進行排查、修復。ide

 

快速理解SQL注入工具

上面的概念化,可能還會以爲茫然,好吧,那咱們就用簡潔、直觀的圖表進一步描述SQL注入是如何進行欺騙的。測試

首先咱們以51cto的登陸界面做爲例子,看一個正常的登陸場景:加密

111.jpg

爲了描述sql注入的概念,如今咱們把這個登陸的處理邏輯簡化。假如咱們輸入用戶名pingshan和密碼1111,點擊登陸按鈕後,後臺服務器會執行以下sql語句:

Select count(*) from user where user_name=’pingshan’ and pass_word =’1111’

若是返回值爲空,則登陸成功。

 

如今假設存在sql注入漏洞,用戶名輸入pingshan';--,如圖所示:

222.jpg

當咱們點擊登陸按鈕進行提交後,後臺服務器進行拼串,執行的sql語句將是這樣的:

Select count(*) from user where user_name=’pingshan’;--’ and pass_word =’1111’

 

有沒發現?!後面的密碼條件直接被註釋掉了(-- 註釋符號),就是說,只有知道任意一個用戶名,就能夠無密登陸了,多可怕!

 

如何防止SQL注入

防止SQL注入的思路有如下幾點:

1. 對用戶的輸入進行校驗,能夠經過正則表達式、限制長度、對單引號和雙"-"等特殊字符進行轉換;

2. 使用參數化的sql或直接使用存儲過程進行數據查詢存取,避免使用動態拼裝sql

3. 爲每一個應用配置權限有限的數據庫鏈接,避免使用管理員權限的數據庫鏈接;

4. 對重要或機密信息進行加密後存儲;

5. 異常信息給儘量少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝;

 

如何進行SQL注入檢測

SQL注入檢測通常採用工具進行自動化檢測,並且這方面的工具比較多,介紹其中2個:

sqlmap:一個很是強大的sql注入檢測與輔助工具

工具網址:http://sqlmap.org/

 

SQLiv:一款批量SQL注入漏洞掃描工具

介紹網址:http://www.freebuf.com/column/150588.html

相關文章
相關標籤/搜索