Kann ich einen SQL-Injection-Angriff von der SELECT-Anweisung bekommen?

8

2 Fragen eigentlich:

Ich weiß, dass ich Stored Procedures so oft wie möglich verwenden muss, aber ich möchte Folgendes wissen:

A: Kann ich einen SQL-Injection-Angriff von einer SELECT-Anweisung wie (Wählen Sie * von MyTable)?

B: Kann ich auch einen SQL Injection-Angriff erhalten, wenn ich die SQLDataSource in ASP.NET verwende?

    
Etienne 08.07.2009, 17:15
quelle

8 Antworten

19

Um Ihre Fragen zu beantworten.

A: Ja, Sie können einen SQL Injection-Angriff von jeder Abfrage erhalten, die Parameter verwendet (sogar gespeicherte Prozeduren aufrufen, wenn Sie die von Ihrer Plattform bereitgestellten Methoden nicht verwenden) und tun dies über SQL-Aufrufe).

Ich wurde gebeten, ein Beispiel zu geben, wie eine Injektion auch unter Verwendung einer gespeicherten Prozedur durchgeführt werden kann. Ich habe Anwendungen entwickelt, die gespeicherte Prozeduren verwenden, aber auf diese Weise:

%Vor%

Offensichtlich ist dies nicht der Weg, eine gespeicherte Prozedur aufzurufen. Sie sollten die Abstraktionen oder parametrisierten Abfragen Ihrer Plattform verwenden.

B: SQLDataSource ist eine Abstraktionsschicht für Ihre Datenbank. Es wird die SQL-Abfragen für Sie erstellen und sie automatisch bereinigen, um eine Injektion zu verhindern.

Um eine Injektion zu vermeiden, entweder:

  • Sanitize deine Eingaben
  • Verwenden Sie die von Ihrer Plattform bereitgestellte Abstraktionsschicht.
  • Verwenden Sie parametrisierte Abfragen.
Andrew Moore 08.07.2009, 17:19
quelle
5

Sie können jederzeit einen SQL-Injection-Angriff erhalten, bei dem Sie größtenteils keine parametrisierten Abfragen verwenden.

Wenn Ihr Beispiel,

%Vor%

Es gibt keine vom Benutzer eingegebenen Daten, das sollte in Ordnung sein. Etwas wie:

%Vor%

( x ist ein Parameter), dann gibt es eine Chance, dass jemand etwas SQL in ihren Namen injiziert.

B: ASP.NET verwendet parametrisierte Abfragen, da die Abfrage basierend auf den Parametern erstellt wird, die Sie programmgesteuert bereitstellen.

    
Chris Thompson 08.07.2009 17:17
quelle
4

Ich schlage vor, diesen xkcd Comic zu genießen, eine gute Lektion über SQL-Injektion

    
Rodrigo 08.07.2009 17:52
quelle
2

Als Antwort auf Ihren Kommentar - "Was muss ich tun?"

Für Anfänger können Sie die Textfelder validieren oder welches Steuerelement auch verwendet wird, um Eingaben zuzulassen. Wenn Sie nach einer Zahl suchen, stellen Sie sicher, dass sie nur Zahlen eingeben, wenn sie ein Wort eingeben, stellen Sie sicher, dass keine Interpunktion verfügbar ist. Nehmen Sie Zeichen wie - und 'heraus, es sei denn, es ist absolut notwendig. Sie können all dies mit Ajax und / oder Javascript tun. Auch, Hier ist ein Interessanter Artikel zum Schutz vor Injektion. Auch parametrisierte Abfragen sind eine gute Option

    
Eric 09.07.2009 13:27
quelle
2

Injektions-Hacks treten auf, wenn Sie dem Benutzer die Möglichkeit geben, die Abfrage zu manipulieren, und mit den parametrisierten Abfragen werden die meisten (wenn nicht alle) Bedrohungen neutralisiert, da Sonderzeichen maskiert werden, um nur die von Ihnen beabsichtigte Abfrage ausführbar zu machen

Beispiel:
Suchfeld: [] [GO]

%Vor%

Dann fügt der Hacker ein '; um die Abfrage zu beenden und kann jede andere Anfrage schreiben, die sie wollen.

    
Martin Dale Lyness 08.07.2009 17:21
quelle
1

Wenn Sie keine parametrisierten Abfragen verwenden, sondern verketten, können Sie SQL-Injection für jede Art von SELECT-, UPDATE-, DELETE- oder INSERT-Anweisungen erhalten

    
SQLMenace 08.07.2009 17:18
quelle
1

SQL Injection erfordert, dass die SQL-Zeichenfolge mit einigen benutzergesteuerten Parametern kombiniert wird. Wenn die Select-Anweisung also konstant ist, ist sie immun gegen Injektionen. Auf der anderen Seite, wenn Sie eine "WHERE user_id=" + userIdString hinzufügen, dann ist die Injektion möglich.

Das Vermeiden von Injektionen erfordert keine gespeicherten Prozeduren, und Sie sollten nicht darauf warten, Ihre Eingaben zu bereinigen. Binden Sie stattdessen einfach an die Parameter, anstatt Zeichenfolgen zu bearbeiten.

Sehen Sie sich Ссылка

an     
Steven Sudit 08.07.2009 17:20
quelle
1

Jedes Mal, wenn Sie einem Benutzer erlauben, Eingabedaten in eine dynamische SQL-Abfrage einzugeben, besteht die Gefahr einer Injektion. Und eine SQL-Quelle schützt Sie nicht vor einer Injektion. Einfügen, Löschen, Löschen usw. werden immer noch auftreten.

    
Eric 08.07.2009 17:56
quelle

Tags und Links