隨著Web2.0、社交網絡、微博等等一系列新型的互聯網產品的誕 生,基於Web環境的互聯網應用越來越廣泛,企業信息化的過程中各種應用都架設在Web平台上,Web業務的迅速發展也引起黑客們的強烈關注,接踵而至的 就是Web安全威脅的凸顯,對Web服務器的攻擊可以說是形形色色、種類繁多,常見的有掛馬、SQL注入、XSS跨站腳本攻擊等。
SQL注入 所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
通過一下的例子更形象的了解SQL注入:
有一個Login畫面,在這個Login畫面上有兩個文本框分別用來輸入用戶名和密碼,當用戶點了登錄按鈕的時候,會對輸入的用戶名和密碼進行驗證。驗證的SQL語句如下:
select * from student where username='輸入的用戶名' and password='輸入的密碼'
如果能夠檢索到數據,說明驗證通過,否則驗證不通過。
如果用戶在用戶名文本框中輸入 ' or '1' = '1' or '1' = '1,則驗證的SQL語句變成:
select * from student where username='' or '1' = '1' or '1' = '1' and password=''
如果用戶在密碼文本框中輸入 1' or '1' = '1,則驗證的SQL語句變成:
select * from student where username='' and password='1' or '1'='1'
以上兩個SQL語句的where條件永遠是成立的,所以驗證永遠是有效的。
如果在用戶名文本框中輸入tom' ;drop table student-- ,則SQL語句變成:
[sql] view plaincopyprint?
1.select * from student where username='tom' ;drop table student--' and password=''
這樣就變成的兩條SQL語句,執行完查詢操作,接著直接把student表給刪除了(雙連接符表示注釋)
如何防止SQL注入: 1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和雙"-"進行轉換等。
2.永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝。
6.采用一些工具或網絡平台檢測是否存在SQL注入。