當(dāng)前位置:首頁文章首頁 IT學(xué)院 IT技術(shù)

防SQL注入的要點(diǎn)

作者:  來源:  發(fā)布時(shí)間:2011-6-2 9:51:26  點(diǎn)擊:

所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令,比如先前的很多影視網(wǎng)站泄露VIP會(huì)員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊.下面給大家分享教你如何防止SQL注入攻擊的,希望對大家有幫助。

防SQL 注入是一個(gè)系統(tǒng)工程,在項(xiàng)目開發(fā)中就要系統(tǒng)的考慮SQL 注入的問題。一般做到以下4點(diǎn),能比較好的控制SQL 注入:

  1. 嚴(yán)格驗(yàn)證用戶的一切輸入,包括URL參數(shù)。
  2. 將用戶登錄名稱、密碼等數(shù)據(jù)加密保存
  3. 不要用拼接字符串的方式來生成SQL語句,而是用SQL Parameters 傳參數(shù)或者用存儲(chǔ)過程來查詢
  4. 嚴(yán)格驗(yàn)證上傳文件的后綴,exe、aspx、asp等可執(zhí)行程序禁止上傳。

這里介紹一個(gè)簡單通用的方法,用來驗(yàn)證字符串中是否有敏感字符,參數(shù)可以是一個(gè)字符串,也可以是一個(gè)字符串集合,敏感字符可以在Lawlesses數(shù)組中定義:

  1.         public static string[] Lawlesses = { "=", "'" };
  2.         /// <summary>
  3.         /// 敏感字符檢測
  4.         /// </summary>
  5.         /// <param name="args"></param>
  6.         /// <returns></returns>
  7.         public static bool CheckParams(params object[] args)
  8.         {
  9.             if (Lawlesses == null || Lawlesses.Length <= 0) return true;
  10.             //構(gòu)造正則表達(dá)式,例:Lawlesses是=號和'號,則正則表達(dá)式為 .*[=}'].*
  11.             //另外,由于我是想做通用而且容易修改的函數(shù),所以多了一步由字符數(shù)組到正則表達(dá)式,實(shí)際使用中,直接寫正則表達(dá)式亦可;
  12.             string str_Regex = ".*[";
  13.             for (int i = 0; i < Lawlesses.Length - 1; i++)
  14.             {
  15.                 str_Regex += Lawlesses[i] + "|";
  16.             }
  17.             str_Regex += Lawlesses[Lawlesses.Length - 1] + "].*";
  18.             //
  19.             foreach (object arg in args)
  20.             {
  21.                 if (arg is string)//如果是字符串,直接檢查
  22.                 {
  23.                     if (Regex.Matches(arg.ToString(), str_Regex).Count > 0)
  24.                         return false;
  25.                 }
  26.                 else if (arg is ICollection)//如果是一個(gè)集合,則檢查集合內(nèi)元素是否字符串,是字符串,就進(jìn)行檢查
  27.                 {
  28.                     foreach (object obj in (ICollection)arg)
  29.                     {
  30.                         if (obj is string)
  31.                         {
  32.                             if (Regex.Matches(obj.ToString(), str_Regex).Count > 0)
  33.                                 return false;
  34.                         }
  35.                     }
  36.  

相關(guān)軟件

相關(guān)文章

文章評論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z