Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 17354|Svare: 0

[WinForm] C#. .NET for å forhindre SQL-injeksjonsangrep

[Kopier lenke]
Publisert på 19.04.2015 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
Kopier koden
Vår løsning er:
1. For det første, når man legger inn i brukergrensesnittet, for å kontrollere typen og lengden på data for å forhindre SQL-injeksjonsangrep, tilbyr systemet en funksjon for å oppdage injeksjonsangrep; når injeksjonsangrepet først er oppdaget, kan ikke dataene sendes inn;
2. Kontroll av forretningslogikklaget ved å blokkere SQL-nøkkelord på en bestemt måte inne i metoden, og deretter sjekke datalengden for å sikre at det ikke vil være SQL-databaseinjeksjonsangrepskode ved innsending av SQL; Etter denne behandlingen blir imidlertid de maskerte tegnene gjenopprettet når brukergrensesnittet sender ut. Derfor tilbyr systemet funksjoner for å skjerme tegn og funksjoner for å gjenopprette tegn.
3. I datatilgangslaget blir mesteparten av dataene aksessert av lagrede prosedyrer, og de lagrede prosedyreparametrene aksesseres når de kalles, noe som også vil forhindre injeksjonsangrep.







Foregående:Bygg en egendefinert filcache ASP.NET ytelsesoptimalisering
Neste:c# og asp.net forhindre SQL-injeksjonsfiltreringsmetoder
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com