萬盛學電腦網

 萬盛學電腦網 >> 安全資訊防護 >> 什麼是SQL注入和如何防止SQL注入

什麼是SQL注入和如何防止SQL注入

  隨著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注入。


copyright © 萬盛學電腦網 all rights reserved