Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 17354|Svar: 0

[WinForm] C#. .NET för att förhindra SQL-injektionsattacker

[Kopiera länk]
Publicerad på 2015-04-19 23:32:01 | | |
  1. #region  防止sql注入式攻击(可用于UI层控制)
  2.   
  3.    ///
  4.    ///  判断字符串中是否有SQL攻击代码
  5.    ///
  6.    ///  传入用户提交数据
  7.    ///  true-安全;false-有注入攻击现有;
  8.    public   bool  ProcessSqlStr( string  inputString)
  9.      {
  10.       string  SqlStr  =   @"
  11. and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|substring|master|truncate|declare|xp_cmdshell|restore|backup|net +user|net
  12. +localgroup +administrators " ;
  13.         try
  14.           {
  15.             if  ((inputString  !=   null )  &&  (inputString  !=  String.Empty))
  16.               {
  17.                 string  str_Regex  =   @" \b( "   +  SqlStr  +   @" )\b " ;
  18.   
  19.                Regex Regex  =   new  Regex(str_Regex, RegexOptions.IgnoreCase);
  20.                 // string s = Regex.Match(inputString).Value;
  21.                 if  ( true   ==  Regex.IsMatch(inputString))
  22.                     return   false ;
  23.   
  24.           }
  25.       }
  26.        catch
  27.          {
  28.            return   false ;
  29.       }
  30.        return   true ;
  31.   }


  32.    ///
  33.   ///  处理用户提交的请求,校验sql注入式攻击,在页面装置时候运行
  34.   ///  System.Configuration.ConfigurationSettings.AppSettings["ErrorPage"].ToString(); 为用户自定义错误页面提示地址,
  35.   ///  在Web.Config文件时里面添加一个 ErrorPage 即可
  36.   ///
  37.   ///     
  38.   ///  
  39.   public   void  ProcessRequest()
  40.     {
  41.        try
  42.          {
  43.            string  getkeys  =   "" ;
  44.            string  sqlErrorPage  =  System.Configuration.ConfigurationSettings.AppSettings[ " ErrorPage " ].ToString();
  45.           if  (System.Web.HttpContext.Current.Request.QueryString  !=   null )
  46.             {

  47.                for  ( int  i  =   0 ; i  <  System.Web.HttpContext.Current.Request.QueryString.Count; i ++ )
  48.                 {
  49.                   getkeys  =  System.Web.HttpContext.Current.Request.QueryString.Keys;
  50.                     if  ( ! ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys]))
  51.                       {
  52.                        System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage  +   " ?errmsg= "   +  getkeys  +   " 有SQL攻击嫌疑! " );
  53.                      System.Web.HttpContext.Current.Response.End();
  54.                  }
  55.              }
  56.          }
  57.           if  (System.Web.HttpContext.Current.Request.Form  !=   null )
  58.             {
  59.                for  ( int  i  =   0 ; i  <  System.Web.HttpContext.Current.Request.Form.Count; i ++ )
  60.                   {
  61.                    getkeys  =  System.Web.HttpContext.Current.Request.Form.Keys;
  62.                     if  ( ! ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys]))
  63.                       {
  64.                        System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage  +   " ?errmsg= "   +  getkeys  +   " 有SQL攻击嫌疑! " );
  65.                        System.Web.HttpContext.Current.Response.End();
  66.                    }
  67.                }
  68.            }
  69.        }
  70.         catch
  71.           {
  72.             //  错误处理: 处理用户提交信息!
  73.        }
  74.    }
  75.    #endregion
Kopiera koden
Vår lösning är:
1. För det första, när man matar in i UI:t, för att kontrollera typ och längd på data för att förhindra SQL-injektionsattacker, tillhandahåller systemet en funktion för att upptäcka injektionsattacker, och när injektionsattacken har upptäckts kan data inte skickas in;
2. Kontroll av affärslogiklagret, genom att blockera SQL-nyckelord på ett visst sätt inom metoden, och sedan kontrollera datans längd för att säkerställa att det inte förekommer någon SQL-databasinjektionsattackkod vid inlämning av SQL; Efter denna bearbetning återställs dock de maskerade karaktärerna när UI:t skickar ut. Därför tillhandahåller systemet funktioner för att skydda tecken och funktioner för att återställa tecken.
3. I dataåtkomstlagret nås det mesta av datan av lagrade procedurer, och parametrarna för lagrade procedurer nås när de anropas, vilket också förhindrar injektionsattacker.







Föregående:Bygg en anpassad filcache ASP.NET prestandaoptimering
Nästa:c# och asp.net förhindra SQL-injektionsfiltreringsmetoder
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com