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

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

[ASP.NET] ASP.NET έγχυσης Anti-SQL

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 17/4/2015 1:06:50 μ.μ. | | |

1. Τι είναι η ένεση SQL;
     Η λεγόμενη ένεση SQL είναι η εισαγωγή εντολών SQL στη φόρμα φόρμας για την υποβολή ή την εισαγωγή της συμβολοσειράς ερωτήματος του ονόματος τομέα ή του αιτήματος σελίδας και, τέλος, η εξαπάτηση του διακομιστή ώστε να εκτελέσει ορισμένες κακόβουλες εντολές SQL. Υποβάλλοντας παραμέτρους για τη δημιουργία έξυπνων δηλώσεων SQL, μπορείτε να αποκτήσετε με επιτυχία τα επιθυμητά δεδομένα.

2. SQL τύπος ένεσης
Συγκεκριμένα, η ένεση SQL μπορεί να χωριστεί σε πέντε κατηγορίες, και συγκεκριμένα: έγχυση αριθμού, έγχυση χαρακτήρων, ένεση αναζήτησης (όπως), σε ένεση και έγχυση σύνδεσης προτάσεων.
Από την άποψη της εφαρμογής, θα πρέπει να δοθεί ιδιαίτερη προσοχή στην έγχυση SQL σε IP, την αναζήτηση, τη διαγραφή παρτίδων και τη μεταφορά από βάση δεδομένων σε βάση δεδομένων.

3. Πώς να κάνετε την ένεση

Ας δούμε ένα χαρακτηριστικό παράδειγμα
SqlCommand cmd = νέο SqlCommand("ΕΠΙΛΟΓΗ * ΑΠΟ PE_USERS ΟΠΟΥ Όνομα χρήστη = '"
2+ Όνομα χρήστη + "' ΚΑΙ Κωδικός πρόσβασης χρήστη = '" + PassWord + "'", conn);

Δεδομένου ότι δεν υπάρχει επικύρωση για το UserName και το PassWord, εάν UserName="admin' OR 1=1--"
Η εκτελεσμένη δήλωση SQL γίνεται:

ΕΠΙΛΕΞΤΕ * ΑΠΟ PE_USERS ΟΠΟΥ UserName='admin' Ή 1=1—' ΚΑΙ UserPassword=''

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



4. Πώς να αποτρέψετε την έγχυση SQL

1. Φιλτράρετε ή μετατρέψτε ύποπτες συμβολοσειρές

      Η έγχυση SQL αποτρέπεται με τη σύνταξη συναρτήσεων που φιλτράρουν ή μετατρέπουν επικίνδυνες συμβολοσειρές και, στη συνέχεια, χρησιμοποιούν το GLOBAL.ASAX ή ξαναγράφουν παρουσίες περιβάλλοντος

     Εδώ είναι ένα παράδειγμα

δημόσιο στατικό bool SqlFilter2(συμβολοσειρά InText)
2  {
3 συμβολοσειρά word="and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 if(InText==null)
5 επιστροφή false;
6 foreach(συμβολοσειρά i στο word. Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 επιστροφή αληθές.
11    }
12   }
13 επιστροφή false;
14  }


2. Παγκόσμια.asax

προστατευμένο void Application_BeginRequest(Αποστολέας αντικειμένου, EventArgs e)
2  {
3 // Διασχίζοντας τις παραμέτρους Post, εκτός από κρυφούς τομείς
4 foreach(string i σε αυτό. Αίτηση.Φόρμα)
5   {
6 if(i=="__VIEWSTATE")συνέχεια;
7 this.goErr(this. Request.Form.ToString());   
8   }
9 // Διασχίστε την παράμετρο Get.
10 foreach(string i σε αυτό. Request.QueryString)
11   {
12 this.goErr(αυτό. Request.QueryString.ToString());   
13   }
14  }
ιδιωτικό κενό goErr(string tm)
2  {
3 αν (WLCW. Extend.CValidity.SqlFilter2(tm))
4 αυτό. Response.end()
5  }

Πλεονεκτήματα: Αυτή η πτυχή χρησιμοποιείται από τους περισσότερους αρχάριους προγραμματιστές για την πρόληψη της έγχυσης SQL και φαίνεται να λειτουργεί καλά για την πρόληψη της έγχυσης στις περισσότερες περιπτώσεις.

Μειονεκτήματα: 1. Θα φιλτράρει ορισμένους χαρακτήρες που δεν χρησιμοποιήθηκαν αρχικά για ένεση, προκαλώντας απροσδόκητα προβλήματα. Για παράδειγμα, εάν το όνομα ενός μέλους του φόρουμ περιέχει τους ίδιους χαρακτήρες με τους φιλτραρισμένους χαρακτήρες, θα προκαλέσει κάποια απροσδόκητα προβλήματα και προβλήματα.

        2. Απαιτείται φιλτράρισμα ή μετατροπή κάθε φορά, γεγονός που μειώνει την αποτελεσματικότητα του προγράμματος

2. Χρησιμοποιήστε αποθηκευμένες διαδικασίες για παραμετρικά ερωτήματα

Ο κύριος σκοπός της ένεσης SQL είναι η εκτέλεση κακόβουλων εντολών στη βάση δεδομένων υποβάλλοντας κακόβουλο κώδικα SQL. Επομένως, εφόσον οι εντολές SQL υποβάλλονται σε επεξεργασία πριν από την εκτέλεση, η έγχυση SQL μπορεί να αποτραπεί αποτελεσματικά. Τα παραμετροποιημένα ερωτήματα μπορούν να αποτρέψουν αποτελεσματικά την έγχυση SQL.

Παράδειγμα

const string strSql = "SELECT * FROM [PE_Users] WHERE UserName = @UserName";
Παράμετροι parms = νέες παράμετροι("@UserName", DbType.String, userName);

Υπάρχει μια παράμετρος @UserName παραπάνω, χρησιμοποιώντας το αντικείμενο Prarmeter, μέσω της οποίας η παράμετρος προστίθεται στο αντικείμενο Command,
Αυτό σας δίνει ένα παραμετροποιημένο ερώτημα.
Όπως περιγράφεται παραπάνω, ADO.NET αποστέλλει την ακόλουθη πρόταση SQL στον SQL Server:

Exec sp_executesql N 'επιλέξτε * από [pe_users] όπου όνομα χρήστη=@username ',N
'@username nvarchar(20) ',@username=N 'όνομα'

Ο SQL Server αντικαθιστά @username με τη συμβολοσειρά "όνομα" πριν από την εκτέλεση του ερωτήματος.
Ας υποθέσουμε ότι έχετε τις ακόλουθες εισόδους:

«Union Select @@version,null,null—

Η πρόταση SQL που δημιουργείται μοιάζει με αυτό:

Exec sp_executesql N 'επιλέξτε * από [pe_users] όπου όνομα χρήστη=@username ',N
'@username nvarchar(20) ',@username=N ''' union select @@version,null,null--'

Μπορείτε να δείτε ότι ADO.NET διαφεύγει από την είσοδο.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Αντιγραφή κώδικα


Το DbTye ή το SqlDbType μπορεί να είναι μια ποικιλία τύπων δεδομένων.
Μπορείτε να επιλέξετε με βάση τον τύπο δεδομένων σας.
Σε ορισμένα σημεία, μπορεί επίσης να χρησιμοποιηθεί για τον καθορισμό του μήκους της παραμέτρου: int size. Αυτό αποτρέπει επίσης αποτελεσματικά τις υπερχειλίσεις της βάσης δεδομένων και τις σημειώσεις SQL
Δυνατότητα εισόδου.
Πλεονεκτήματα: Αποτρέπει αποτελεσματικά την έγχυση SQL.
Μειονεκτήματα: Ορισμένα μέρη δεν μπορούν να εφαρμοστούν, όπως στο.

3. Λευκή λίστα

Περιγραφή:
Ορισμένες γνωστές περιοχές παραμέτρων μπορούν να αντιμετωπιστούν με τη μορφή λιστών επιτρεπόμενων, οι οποίες μπορούν να αποτρέψουν την έγχυση SQL και την υποβολή ερωτημάτων
Λάθος, για παράδειγμα: σειρά κατά + όνομα στήλης, όταν το όνομα της στήλης μεταβιβάζεται με τη μορφή παραμέτρου, μπορεί να διαμορφωθεί μια λίστα επιτρεπόμενων για να κριθεί πρώτα η παράμετρος
εάν ο αριθμός βρίσκεται στη λίστα επιτρεπόμενων και, στη συνέχεια, κάντε ερώτημα, διαφορετικά θα υποβληθεί σε εσφαλμένη επεξεργασία.
Πλεονεκτήματα: ασφαλές και αξιόπιστο
Μειονεκτήματα: Μικρό εύρος εφαρμογών




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

Mail To:help@itsvse.com