當前位置:編程學習大全網 - 源碼下載 - 如何防止Sql註入?

如何防止Sql註入?

(1)對於動態構造SQL查詢的情況,可以使用以下技術:

第壹:替換單引號,即將所有單引號改為兩個單引號,防止攻擊者修改SQL命令的含義。看前面的例子,“SELECT * From users where log in = ' ' or ' ' 1 ' ' = ' 1 ' and password = ' ' or ' ' 1 ' ' = ' 1 '”顯然會得到與“SELECT * From users where log in = ' or ' 1 ' = ' 1 ' and password = ' or ' 1 ' = ' 1 '”相同的不同結果。

其次,刪除用戶輸入中的所有連字符,以防止攻擊者構造諸如“select * from users where log in = ' MAS '-and password = ' '”的查詢,因為該查詢的後半部分已被註釋掉,不再有效。攻擊者只要知道壹個合法的用戶登錄名,就可以成功獲得訪問權限,根本不需要知道用戶的密碼。

第三,限制用於執行查詢的數據庫帳戶的權限。使用不同的用戶帳戶執行查詢、插入、更新和刪除操作。因為可以由不同帳戶執行的操作是隔離的,所以它還防止了最初用於執行SELECT命令的位置被用於執行INSERT、UPDATE或DELETE命令。

⑵使用存儲過程執行所有查詢。SQL參數的傳遞方式將防止攻擊者使用單引號和連字符進行攻擊。此外,它還允許數據庫權限被限制為只允許特定的存儲過程執行,並且所有用戶輸入必須符合被調用存儲過程的安全上下文,因此很難再有註入攻擊。

(3)限制表單或查詢字符串輸入的長度。如果用戶的登錄名最多只有10個字符,那麽就不要識別表單中輸入的超過10個字符,這樣會大大增加攻擊者在SQL命令中插入有害代碼的難度。

(4)檢查用戶輸入的合法性,確保輸入只包含合法數據。數據校驗要在客戶端和服務器端都進行——之所以要進行服務器端驗證,是為了彌補客戶端驗證機制脆弱的安全性。

在客戶端,攻擊者完全有可能獲取壹個網頁的源代碼,修改驗證合法性的腳本(或者直接刪除腳本),然後通過修改後的形式將非法內容提交給服務器。因此,確保驗證操作確實已經執行的唯壹方法是在服務器端也執行驗證。您可以使用許多內置的驗證對象,如RegularExpressionValidator,它可以自動生成用於驗證的客戶端腳本。當然,也可以插入服務器端的方法調用。如果找不到現成的驗證對象,可以通過CustomValidator自己創建壹個。

⑸加密並保存用戶登錄名、密碼等數據。對用戶輸入的數據進行加密,然後與數據庫中存儲的數據進行比較,相當於對用戶輸入的數據進行了“消毒”,用戶輸入的數據對數據庫不再有任何特殊意義,從而防止了攻擊者註入SQL命令。系統。web . security . forms authentication類有壹個hashpasswordforstoringconfigfile,非常適合輸入數據的消毒。

[6]檢查提取數據的查詢返回的記錄數。如果程序只要求返回壹條記錄,但實際返回的記錄不止壹行,則視為錯誤。

-

關鍵是要明白原理,其實預防很簡單,

1.過濾SQL所需參數中的敏感字符(註意忽略大小寫)。

2.禁用數據庫服務器的xp_cmdshell存儲過程,並刪除相應的dll。

3.屏蔽服務器異常信息

  • 上一篇:介紹幾部美國好看的電影,好萊塢大片。不要愛情的,2000年以後拍的。科幻,恐懼,懸疑,戰爭,動作等等都
  • 下一篇:臥薪嘗膽的勾踐,為何被人稱為過河拆橋的小人?
  • copyright 2024編程學習大全網