Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 16201|Antwort: 0

[ASP.NET] ASP.NET der Anti-SQL-Injektion

[Link kopieren]
Veröffentlicht am 17.04.2015 13:06:50 | | |

1. Was ist SQL-Injektion?
     Die sogenannte SQL-Injektion besteht darin, SQL-Befehle ins Formular einzufügen, um die Abfragefolge des Domainnamens oder der Seitenanfrage einzureichen oder einzugeben und schließlich den Server dazu zu bringen, bösartige SQL-Befehle auszuführen. Indem Sie Parameter einreichen, um clevere SQL-Anweisungen zu erstellen, können Sie erfolgreich die gewünschten Daten erhalten.

2. SQL Art der Injektion
Konkret lässt sich SQL-Injection in fünf Kategorien unterteilen, nämlich: Number Injection, Character Injection, Search Injection (wie), In-Injection und Sentence Connection Injection.
Aus Anwendungssicht sollte besondere Aufmerksamkeit auf SQL-Injektion in IP, Suche, Batch-Löschung und Übertragung von Datenbank zu Datenbank gelegt werden.

3. Wie man injiziert

Schauen wir uns ein typisches Beispiel an
SqlCommand cmd = neuer SqlCommand("SELECT * FROM PE_USERS WHERE UserName = '"
2+ BenutzerName + "' UND BenutzerPasswort = '" + PassWord + "'", Kommando);

Da es keine Validierung für BenutzerName und PassWord gibt, wenn Benutzername="admin' ODER 1=1--"
Die ausgeführte SQL-Anweisung wird:

WÄHLE * AUS PE_USERS WO Benutzername='admin' ODER 1=1—' UND BenutzerPasswort=''

Das führt zu einer SQL-Injektion, und die Bedingungen gelten immer, sodass man sich erfolgreich ohne Passwort anmelden kann.



4. Wie man SQL-Injection verhindert

1. Verdächtige Strings filtern oder konvertieren

      SQL-Injection wird verhindert, indem Funktionen geschrieben werden, die gefährliche Zeichenketten filtern oder umwandeln, und dann GLOBAL.ASAX verwenden oder Kontextinstanzen neu schreiben

     Hier ein Beispiel

öffentlicher statischer Bool SqlFilter2(String InText)
2  {
3 string word="and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 if(InText==null)
5 Rückkehr falsch;
6 foreach(String i in Word. Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 kehren wahr zurück;
11    }
12   }
13 Rückkehr falsch;
14  }


2. Global.asax

protected void Application_BeginRequest(Objektsender, EventArgs e)
2  {
3 // Durchquerung der Post-Parameter, außer bei versteckten Domänen
4 foreach(string i in diesem Bereich. Anfrage.Form)
5   {
6 if(i=="__VIEWSTATE")fortsetzen;
7 this.goErr(this. Request.Form.ToString());   
8   }
9 // Durchqueren des Get-Parameters.
10 für jede (Zeichenkette i in diesem Bereich. Request.QueryString)
11   {
12 this.goErr(this. Request.QueryString.ToString());   
13   }
14  }
private Void goErr(String tm)
2  {
3 if (WLCW. Extend.CValidity.SqlFilter2(tm))
4 das. Response.end()
5  }

Vorteile: Dieser Aspekt wird von den meisten Anfängern genutzt, um SQL-Injection zu verhindern, und scheint in den meisten Fällen gut zu funktionieren, um Injektionen zu verhindern.

Nachteile: 1. Es filtert einige Zeichen, die ursprünglich nicht für die Injektion verwendet wurden, was unerwartete Probleme verursacht. Wenn zum Beispiel der Name eines Forenmitglieds dieselben Zeichen wie die gefilterten Zeichen enthält, führt das zu unerwarteten Problemen und Schwierigkeiten.

        2. Jedes Mal ist eine Filterung oder Konvertierung erforderlich, was die Effizienz des Programms verringert

2. Verwendung gespeicherter Prozeduren für parametrische Abfragen

Der Hauptzweck der SQL-Injection ist es, bösartige Befehle in der Datenbank auszuführen, indem bösartiger SQL-Code eingereicht wird. Daher kann SQL-Injektion effektiv verhindert werden, solange SQL-Befehle vor der Ausführung verarbeitet werden. Parametrisierte Abfragen können SQL-Injection effektiv verhindern.

Beispiel

const string strSql = "SELECT * FROM [PE_Users] WHERE UserName = @UserName";
Parameter parms = neue Parameter("@UserName", DbType.String, userName);

Es gibt einen oben @UserName Parameter, der das Prarmeter-Objekt verwendet, durch den der Parameter zum Command-Objekt hinzugefügt wird,
Das liefert eine parametrisierte Abfrage.
Wie oben beschrieben, sendet ADO.NET folgende SQL-Anweisung an SQL Server:

Exec sp_executesql N 'select * aus [pe_users], wo Benutzername=@username ',N
'@username nvarchar(20) ',@username=N 'name'

SQL Server ersetzt @username durch den String "name", bevor die Abfrage ausgeführt wird.
Angenommen, Sie haben folgende Eingaben:

'Union select @@version, null, null—

Die generierte SQL-Anweisung sieht so aus:

Exec sp_executesql N 'select * aus [pe_users], wo Benutzername=@username ',N
'@username nvarchar(20) ',@username=N '''' Vereinigung wählen @@version,null,null--'

Man sieht, dass ADO.NET dem Input entgeht.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Code kopieren


DbTye oder SqlDbType können verschiedene Datentypen sein.
Du kannst basierend auf deinem Datentyp wählen.
An manchen Stellen kann es auch verwendet werden, um die Länge des Parameters anzugeben: int-Größe. Dies verhindert auch effektiv Datenbanküberläufe und SQL-Notizen
Möglichkeit des Eintritts.
Vorteile: Verhindert effektiv SQL-Injection.
Nachteile: Manche Orte können nicht angewendet werden, wie zum Beispiel in.

3. Whitelist

Beschreibung:
Einige bekannte Parameterbereiche können in Form von Whitelists behandelt werden, was SQL-Injektionen und Abfragen verhindert
Falsch, zum Beispiel: Ordnung nach + Spaltennamen, wenn der Spaltenname in Form eines Parameters übergeben wird, kann eine Whitelist formuliert werden, um den Parameter zuerst zu beurteilen
ob die Nummer in der Whitelist ist und dann abfragen, sonst wird sie falsch verarbeitet.
Vorteile: sicher und zuverlässig
Nachteile: Kleiner Anwendungsbereich




Vorhergehend:Das Textfeld erlaubt nur die Eingabe von Zahlen
Nächster:asp.net Texteditor (FCKeditor)
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com