Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 17354|Απάντηση: 0

[Φόρμα Win] C#. .NET για την αποτροπή επιθέσεων SQL injection

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 19/4/2015 11: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
Αντιγραφή κώδικα
Η λύση μας είναι:
1. Πρώτον, κατά την εισαγωγή στη διεπαφή χρήστη, για τον έλεγχο του τύπου και του μήκους των δεδομένων για την αποφυγή επιθέσεων έγχυσης SQL, το σύστημα παρέχει μια λειτουργία για τον εντοπισμό επιθέσεων έγχυσης, μόλις εντοπιστεί η επίθεση έγχυσης, τα δεδομένα δεν μπορούν να υποβληθούν.
2. Έλεγχος επιπέδου επιχειρηματικής λογικής, αποκλείοντας τις λέξεις-κλειδιά SQL με συγκεκριμένο τρόπο μέσα στη μέθοδο και, στη συνέχεια, ελέγχοντας το μήκος των δεδομένων για να διασφαλιστεί ότι δεν θα υπάρχει κώδικας επίθεσης έγχυσης βάσης δεδομένων SQL κατά την υποβολή SQL. Ωστόσο, μετά από αυτήν την επεξεργασία, οι καλυμμένοι χαρακτήρες αποκαθίστανται κατά την έξοδο του περιβάλλοντος εργασίας χρήστη. Επομένως, το σύστημα παρέχει λειτουργίες για την προστασία χαρακτήρων και λειτουργίες για την επαναφορά χαρακτήρων.
3. Στο επίπεδο πρόσβασης δεδομένων, τα περισσότερα από τα δεδομένα είναι προσβάσιμα από αποθηκευμένες διαδικασίες και οι αποθηκευμένες παράμετροι διαδικασίας είναι προσβάσιμες όταν καλούνται, γεγονός που θα αποτρέψει επίσης τις επιθέσεις έγχυσης.







Προηγούμενος:Δημιουργήστε μια προσαρμοσμένη προσωρινή μνήμη αρχείων ASP.NET βελτιστοποίηση απόδοσης
Επόμενος:c# και asp.net αποτρέπουν τις μεθόδους φιλτραρίσματος SQL injection
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com