Schützt asp.net vor SQL-Injection-Angriffen

7

Standardmäßig schützt ASP.net vor SQL-Injection-Angriffen bei Verwendung von ASP-Steuerelementen?

    
mrtsherman 28.02.2011, 16:20
quelle

7 Antworten

9

Nein. Solange Sie SQL bereitstellen, liegt es an Ihnen, schlau zu sein, wie Sie die Steuerelemente verwenden.

Das bedeutet normalerweise, Eingabe zu bereinigen und Parameterized Queries oder Stored Procedures über dynamische SQL-Strings zu verwenden.

Wenn das Steuerelement die Abfragen für Sie generiert (wie die Mitgliedschaftskontrollen usw.), sind Sie gut geschützt.

    
Justin Niessner 28.02.2011, 16:21
quelle
10

Ja und nein.

ADO.NET unterstützt die Parametrisierung sehr gut und wenn Sie es richtig verwenden, werden die Parameterwerte automatisch bereinigt, um eine SQL-Injektion zu verhindern. Sie können also einem SqlCommand (oder einem SqlDataSource control) Parameter hinzufügen, ohne sich um too Gedanken zu machen, was in ihnen steckt.

Die gute Nachricht ist, dass es sehr einfach ist, deine Sachen zu parametrisieren. Ich zeige Ihnen ein C # -Beispiel, um es programmgesteuert zu machen, aber Sie können es deklarativ mit Serversteuerelementen tun, wenn Sie bevorzugen.

Die schlechte Nachricht ist, dass Sie genauso wie alles andere darüber nachdenken müssen, was Sie tun. Jede Zeichenfolge aus einer unsicheren Quelle muss parametrisiert werden , wenn Sie eine Sicherheit haben möchten. Wenn Sie es wörtlich in die Abfrage einfügen, haben Sie die Sicherheitsfunktionen von ADO.NET umgangen.

Sicher:

%Vor%

Nicht sicher:

%Vor%

Wenn irgendetwas in Ihrer SQL-Abfrage direkt vom Benutzer kommt, müssen Sie es in einen Parameter eingeben oder alle Wetten sind deaktiviert. Und genau wie fast alles andere ist es möglich, sich selbst in den Fuß zu schießen. Zum Beispiel könnten Sie SQL-Code nehmen, ihn in einen Parameter einfügen und ihn an eine SQL% übergeben. co_de% Aussage. Aber du würdest das nicht tun, oder, weil es eine sehr schlechte Idee ist.

Immer noch nicht sicher (ja, ich habe das im Produktionscode gesehen)!

%Vor%

TL; DR: ADO.NET bietet großartige Funktionen, um die SQL-Injektion zu stoppen, aber nur, wenn Sie sie korrekt verwenden.

    
Justin Morgan 28.02.2011 16:48
quelle
8

Die meisten ASP.Net-Steuerelemente (außer DataGrid) verwenden überhaupt kein SQL.

Wenn Sie Ihre eigene SQL in Ihrem Code haben (mit SqlCommand s), erhalten Sie keinen kostenlosen Schutz; Sie müssen Parameter verwenden.

Die wenigen Steuerelemente, die SQL (SqlDataSource und das Framework der Mitgliedschaft) verwenden, verwenden Parameter und sind sicher gegen die Injektion.

    
SLaks 28.02.2011 16:22
quelle
3

ASP.NET schützt nicht vor SQL-Injektionen!

ASP.NET ist nur das Framework für Webanwendungen und diktiert nicht, wie Sie auf Ihre Datenbank zugreifen. Es hängt davon ab, wie Sie Ihren Datenzugriff implementieren:

  • Wenn Sie ADO.NET verwenden und Ihre SQL-Abfragen als Zeichenfolgen erstellen, müssen Sie alle Benutzereingaben bereinigen, damit sie vor Injektionen geschützt sind.
  • Wenn Sie ADO.NET verwenden und SqlParameters verwenden, denke ich, dass Sie vor Injektionen sicher sind.
  • Wenn Sie ein ORM-Tool für den Datenzugriff verwenden, würde ich sagen, dass Sie sicher sind (zumindest wenn Sie die üblichen verwenden)
  • Wenn Sie DataSets verwenden, sind Sie wahrscheinlich auch sicher.
  • Wenn Sie einige datengebundene Steuerelemente von Drittanbietern verwenden, dann hoffe ich, dass sie sich um den Schutz vor SQL-Injections kümmern

Wahrscheinlich habe ich vergessen, in meiner Antwort viel zu erwähnen, aber Sie können sehen, dass die Antwort lautet: "Es kommt darauf an"

    
M4N 28.02.2011 16:38
quelle
1

Wenn Sie immer SqlParameter s verwenden und Benutzereingaben niemals in SQL verketten, sollten Sie sicher sein. Sie können SqlParameter s auch ohne gespeicherte Prozeduren verwenden.

    
Erik A. Brandstadmoen 28.02.2011 16:41
quelle
1

Nein, ASP.Net schützt nicht vor SQL-Injektionen. Der von MS ausgelieferte Code für die ASP.NEt-Steuerelemente soll frei von SQL-Injection sein, was jedoch nicht alle Probleme verhindert, mit denen ein Entwickler umgehen kann. Die beste Verteidigung ist ein gutes Verständnis von SQL Injection und sorgfältiger Codierung. Wenn dies aus irgendwelchen Gründen unerreichbar ist, gibt es Tools, die helfen können, Remus Rusanu 28.02.2011 17:58

quelle
0

Teilweise. Es gibt einen Filter, der standardmäßig aktiviert ist und das Konstruieren eines SQL-Injection-Angriffs schwierig macht, wenn er nicht ausgeschaltet ist.

Die Methode, die viele ASPNET-Anwendungen für den Zugriff auf MSSQL-Datenbanken verwenden, macht sie im Allgemeinen resistent gegen SQL-Injection-Angriffe.

Aber es ist trotzdem möglich, eine verwundbare Anwendung zu erstellen, wenn Sie unvorsichtig genug sind.

    
MarkR 28.02.2011 16:23
quelle