
Programmierer erobern die Sicherheit: Teilen und Lernen - SQL Injection
Einfach ausgedrückt ist SQL (oder Structured Query Language) die Sprache, die für die Kommunikation mit relationalen Datenbanken verwendet wird; es ist die Abfragesprache, die von Entwicklern, Datenbankadministratoren und Anwendungen zur Verwaltung der täglich werden riesige Datenmengen generiert.
Unsere Daten werden schnell zu einem der wertvollsten Rohstoffe der Welt... und wenn etwas wertvoll ist, werden Bösewichte es zu ihrem Vorteil in die Hände bekommen wollen.
Angreifer verwenden SQL-Injection -- eine der ältesten (seit 1998!) und die lästigsten Datenlücken, die es gibt — zum Stehlen und Ändern vertraulicher Informationen, die in Millionen von Datenbanken auf der ganzen Welt verfügbar sind. Es ist heimtückisch, und Entwickler müssen verstehen, wie SQL-Injection funktioniert (und wie wir uns davor schützen können), wenn wir unsere Daten schützen wollen.
Zu diesem Zweck werden wir drei wichtige Aspekte der SQL-Injection erörtern:
- So funktioniert es
- Warum es so gefährlich ist
- Wie kann man sich dagegen wehren
Verstehen Sie SQL Injection
SQL-Injection kann mit einem Wort verstanden werden: Kontext.
Innerhalb einer Anwendung gibt es zwei Kontexte: einen für Daten, den anderen für Code. Der Codekontext teilt dem Computer mit, was ausgeführt werden soll, und trennt ihn von den zu verarbeitenden Daten.
Eine SQL-Injection tritt auf, wenn ein Angreifer Daten eingibt, die vom SQL-Interpreter fälschlicherweise als Code behandelt werden.
Ein Beispiel ist ein Eingabefeld auf einer Website, in das ein Angreifer '“ OR 1=1" eingibt und es an das Ende einer SQL-Abfrage angehängt wird. Wenn diese Abfrage ausgeführt wird, gibt sie für jede Zeile in der Datenbank „true“ zurück. Das bedeutet, dass alle Datensätze aus der abgefragten Tabelle zurückgegeben werden.
Die Auswirkungen der SQL-Injection können katastrophal sein. Tritt dies auf einer Anmeldeseite auf, werden möglicherweise alle Benutzerdatensätze zurückgegeben, möglicherweise einschließlich Benutzernamen und Kennwörtern. Wenn eine einfache Abfrage zum Herausnehmen von Daten erfolgreich ist, gilt dies auch für Abfragen zum Ändern von Daten.
Schauen wir uns einen anfälligen Code an, damit Sie sehen können, wie eine SQL-Injection-Schwachstelle in der Natur aussieht.
Schau dir diesen Code an:
Zeichenkettenabfrage = „WÄHLEN SIE DEN KONTOSTAND VON user_data WHERE user_name =“
+ request.getParameter („Kundenname“);
versuche {
Anweisungsanweisung = Connection.createStatement (...);
ResultSet-Ergebnisse = Statement.executeQuery (Abfrage);
}
Der Code hier hängt einfach die Parameterinformationen vom Client ohne Validierung an das Ende der SQL-Abfrage an. In diesem Fall kann ein Angreifer Code in ein Eingabefeld oder URL-Parameter eingeben und dieser wird ausgeführt.
Das Wichtigste ist nicht, dass Angreifer jeder SELECT-Abfrage nur '“ OR 1=1" hinzufügen können, sondern dass ein Angreifer jede Art von SQL-Abfrage (INSERT, UPDATE, DELETE, DROP usw.) manipulieren und sie um alles erweitern kann, was die Datenbank unterstützt. Es gibt großartige Ressourcen und öffentlich verfügbare Tools, die zeigen, was möglich ist.

Wir werden bald lernen, wie wir dieses Problem beheben können. Lassen Sie uns zunächst verstehen, wie viel Schaden angerichtet werden kann.
Warum SQL Injection so gefährlich ist
Hier sind nur drei Beispiele für Sicherheitslücken, die durch SQL-Injection verursacht wurden:
- Website des Wahlausschusses von Illinois wurde verletzt aufgrund von SQL-Injection-Schwachstellen. Die Angreifer stahlen die persönlichen Daten von 200.000 US-Bürgern. Aufgrund der Art der festgestellten Sicherheitslücke hätten die Angreifer die Daten ebenfalls ändern können, obwohl sie dies nicht getan haben.
- Hetzner, ein südafrikanisches Website-Hosting-Unternehmen, wurde verletzt in Höhe von 40.000 Kundendatensätzen. Eine SQL-Injection-Schwachstelle führte zum möglichen Diebstahl aller Kundendatensätze in ihrer Datenbank.
- Ein katholischer Finanzdienstleister in Minnesota, Vereinigte Staaten, wurde verletzt mit SQL Injection. Kontodaten, einschließlich Kontonummern, von fast 130.000 Kunden wurden gestohlen.
Sensible Daten können verwendet werden, um Konten zu übernehmen, Passwörter zurückzusetzen, Geld zu stehlen oder Betrug zu begehen.
Sogar Informationen, die nicht als sensibel oder persönlich identifizierbar gelten, können für andere Angriffe verwendet werden. Adressinformationen oder die letzten vier Ziffern Ihrer behördlichen Identifikationsnummer können verwendet werden, um sich bei Unternehmen als Sie auszugeben oder Ihr Passwort zurückzusetzen.
Wenn ein Angriff erfolgreich ist, können Kunden das Vertrauen in das Unternehmen verlieren. Die Wiederherstellung nach Systemschäden oder behördlichen Bußgeldern kann Millionen von Dollar kosten.
Aber für dich muss es nicht so enden.
Besiege SQL Injection
Die SQL-Injection kann verhindert werden, indem Teile Ihrer Anwendung eindeutig gekennzeichnet werden, sodass der Computer weiß, ob es sich bei einem bestimmten Teil um Daten oder Code handelt, der ausgeführt werden muss. Dies kann mithilfe parametrisierter Abfragen erfolgen.
Wenn SQL-Abfragen Parameter verwenden, verwendet der SQL-Interpreter die Parameter nur als Daten. Er führt ihn nicht als Code aus.
Beispielsweise funktioniert ein Angriff wie '“ OR 1=1" nicht. Die Datenbank sucht nach der Zeichenfolge „OR 1=1" und findet sie nicht in der Datenbank. Es zuckt einfach mit den Achseln und sagt: „Entschuldigung, ich kann das nicht für dich finden.“
Ein Beispiel für eine parametrisierte Abfrage in Java sieht so aus:

Die meisten Entwicklungsframeworks bieten integrierte Schutzmaßnahmen gegen SQL-Injection.
Objektrelationale Mapper (ORMs), wie Entitätsframework in der .NET-Familie parametrisiert Abfragen standardmäßig. Dadurch wird die SQL-Injektion erledigt, ohne dass Sie sich darum kümmern müssen.
Sie müssen jedoch wissen, wie Ihr spezielles ORM funktioniert. Zum Beispiel Überwintern, ein beliebtes ORM in der Java-Welt, kann immer noch verwundbar sein bei falscher Verwendung zur SQL-Injection.
Die Parametrisierung von Abfragen ist die erste und beste Verteidigung, aber es gibt noch andere. Gespeicherte Prozeduren unterstützen auch SQL-Parameter und können verwendet werden, um eine SQL-Injektion zu verhindern. Beachten Sie, dass die gespeicherten Prozeduren muss auch richtig gebaut werden damit das funktioniert.
//Das sollte auch WIRKLICH validiert werden
Zeichenfolge customname = request.getParameter („customerName“);
//Eingabevalidierung durchführen, um Angriffe zu erkennen
Zeichenkettenabfrage = „WÄHLEN SIE account_balance AUS user_data AUS WO user_name =? „;
PreparedStatement pstmt = Connection.PreparedStatement (Abfrage);
pstmt.setString (1, benutzerdefinierter Name);
ResultSet-Ergebnisse = pstmt.executeQuery ();
Validieren und desinfizieren Sie Ihre Eingaben immer. Da einige Zeichen, wie z. B. „OR 1=1", nicht von einem legitimen Benutzer Ihrer Anwendung eingegeben werden, müssen Sie sie nicht zulassen. Sie können dem Benutzer eine Fehlermeldung anzeigen oder sie aus Ihrer Eingabe entfernen, bevor Sie sie verarbeiten.
Verlassen Sie sich dabei nicht allein auf Validierung und Desinfektion, um sich zu schützen. Kluge Menschen haben Wege gefunden, das zu umgehen. Das sind gute Defense-in-Depth-Strategien (DiD), aber Parametrisierung ist der todsichere Weg, um alle Grundlagen abzudecken.
Eine weitere gute DiD-Strategie besteht darin, die „geringsten Rechte“ innerhalb der Datenbank zu verwenden und Eingaben auf die Whitelist zu setzen. Die Durchsetzung der geringsten Rechte bedeutet, dass Ihre Anwendung innerhalb der Datenbank nicht über unbegrenzte Funktionen verfügt. Sollte sich ein Angreifer Zugriff verschaffen, ist der Schaden, den er anrichten kann, begrenzt.
OWASP hat eine großartige Spickzettel für SQL-Injection verfügbar, um zu zeigen, wie man mit dieser Sicherheitslücke in mehreren Sprachen und Plattformen umgeht... aber wenn Sie noch einen Schritt weiter gehen möchten, können Sie jetzt auf unserer Plattform eine SQL Injection-Challenge in Ihrer bevorzugten Sprache spielen; hier sind einige der beliebtesten, um loszulegen:
SQL-Injektion in Python Django
Die Reise beginnt
Sie haben große Fortschritte beim Verständnis von SQL Injection und den zur Behebung des Problems erforderlichen Schritte erzielt. Fantastisch!
Wir haben besprochen, wie eine SQL-Injection abläuft. In der Regel verwendet ein Angreifer Eingaben, um Ihre Datenbankabfragen für seine eigenen schändlichen Zwecke zu steuern.
Wir haben auch den Schaden gesehen, der durch die Ausnutzung von SQL-Injection-Schwachstellen verursacht wird: Konten können kompromittiert werden und Millionen von Dollar verloren gehen... ein Albtraum und noch dazu ein teurer.
Wir haben gesehen, wie eine SQL-Injektion verhindert werden kann:
- Parametrisierung von Abfragen
- Verwenden objektrelationaler Mapper und gespeicherter Prozeduren
- Benutzereingaben validieren und auf die Whitelist setzen
Jetzt liegt es an dir. Üben ist der beste Weg, um weiter zu lernen und sich weiterzuentwickeln. Schauen Sie sich doch unsere an Ressourcen zum Lernen auf SQL Injection, dann probiere unsere kostenlose Demo von der Plattform? Du bist auf dem besten Weg, ein Secure Code Warrior zu werden.


Angreifer verwenden SQL Injection — eine der ältesten (seit 1998!) und die lästigsten Datenlücken, die es gibt — um vertrauliche Informationen zu stehlen und zu verändern, die in Millionen von Datenbanken auf der ganzen Welt verfügbar sind.
Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

Secure Code Warrior für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Eine Demo buchenJaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.


Einfach ausgedrückt ist SQL (oder Structured Query Language) die Sprache, die für die Kommunikation mit relationalen Datenbanken verwendet wird; es ist die Abfragesprache, die von Entwicklern, Datenbankadministratoren und Anwendungen zur Verwaltung der täglich werden riesige Datenmengen generiert.
Unsere Daten werden schnell zu einem der wertvollsten Rohstoffe der Welt... und wenn etwas wertvoll ist, werden Bösewichte es zu ihrem Vorteil in die Hände bekommen wollen.
Angreifer verwenden SQL-Injection -- eine der ältesten (seit 1998!) und die lästigsten Datenlücken, die es gibt — zum Stehlen und Ändern vertraulicher Informationen, die in Millionen von Datenbanken auf der ganzen Welt verfügbar sind. Es ist heimtückisch, und Entwickler müssen verstehen, wie SQL-Injection funktioniert (und wie wir uns davor schützen können), wenn wir unsere Daten schützen wollen.
Zu diesem Zweck werden wir drei wichtige Aspekte der SQL-Injection erörtern:
- So funktioniert es
- Warum es so gefährlich ist
- Wie kann man sich dagegen wehren
Verstehen Sie SQL Injection
SQL-Injection kann mit einem Wort verstanden werden: Kontext.
Innerhalb einer Anwendung gibt es zwei Kontexte: einen für Daten, den anderen für Code. Der Codekontext teilt dem Computer mit, was ausgeführt werden soll, und trennt ihn von den zu verarbeitenden Daten.
Eine SQL-Injection tritt auf, wenn ein Angreifer Daten eingibt, die vom SQL-Interpreter fälschlicherweise als Code behandelt werden.
Ein Beispiel ist ein Eingabefeld auf einer Website, in das ein Angreifer '“ OR 1=1" eingibt und es an das Ende einer SQL-Abfrage angehängt wird. Wenn diese Abfrage ausgeführt wird, gibt sie für jede Zeile in der Datenbank „true“ zurück. Das bedeutet, dass alle Datensätze aus der abgefragten Tabelle zurückgegeben werden.
Die Auswirkungen der SQL-Injection können katastrophal sein. Tritt dies auf einer Anmeldeseite auf, werden möglicherweise alle Benutzerdatensätze zurückgegeben, möglicherweise einschließlich Benutzernamen und Kennwörtern. Wenn eine einfache Abfrage zum Herausnehmen von Daten erfolgreich ist, gilt dies auch für Abfragen zum Ändern von Daten.
Schauen wir uns einen anfälligen Code an, damit Sie sehen können, wie eine SQL-Injection-Schwachstelle in der Natur aussieht.
Schau dir diesen Code an:
Zeichenkettenabfrage = „WÄHLEN SIE DEN KONTOSTAND VON user_data WHERE user_name =“
+ request.getParameter („Kundenname“);
versuche {
Anweisungsanweisung = Connection.createStatement (...);
ResultSet-Ergebnisse = Statement.executeQuery (Abfrage);
}
Der Code hier hängt einfach die Parameterinformationen vom Client ohne Validierung an das Ende der SQL-Abfrage an. In diesem Fall kann ein Angreifer Code in ein Eingabefeld oder URL-Parameter eingeben und dieser wird ausgeführt.
Das Wichtigste ist nicht, dass Angreifer jeder SELECT-Abfrage nur '“ OR 1=1" hinzufügen können, sondern dass ein Angreifer jede Art von SQL-Abfrage (INSERT, UPDATE, DELETE, DROP usw.) manipulieren und sie um alles erweitern kann, was die Datenbank unterstützt. Es gibt großartige Ressourcen und öffentlich verfügbare Tools, die zeigen, was möglich ist.

Wir werden bald lernen, wie wir dieses Problem beheben können. Lassen Sie uns zunächst verstehen, wie viel Schaden angerichtet werden kann.
Warum SQL Injection so gefährlich ist
Hier sind nur drei Beispiele für Sicherheitslücken, die durch SQL-Injection verursacht wurden:
- Website des Wahlausschusses von Illinois wurde verletzt aufgrund von SQL-Injection-Schwachstellen. Die Angreifer stahlen die persönlichen Daten von 200.000 US-Bürgern. Aufgrund der Art der festgestellten Sicherheitslücke hätten die Angreifer die Daten ebenfalls ändern können, obwohl sie dies nicht getan haben.
- Hetzner, ein südafrikanisches Website-Hosting-Unternehmen, wurde verletzt in Höhe von 40.000 Kundendatensätzen. Eine SQL-Injection-Schwachstelle führte zum möglichen Diebstahl aller Kundendatensätze in ihrer Datenbank.
- Ein katholischer Finanzdienstleister in Minnesota, Vereinigte Staaten, wurde verletzt mit SQL Injection. Kontodaten, einschließlich Kontonummern, von fast 130.000 Kunden wurden gestohlen.
Sensible Daten können verwendet werden, um Konten zu übernehmen, Passwörter zurückzusetzen, Geld zu stehlen oder Betrug zu begehen.
Sogar Informationen, die nicht als sensibel oder persönlich identifizierbar gelten, können für andere Angriffe verwendet werden. Adressinformationen oder die letzten vier Ziffern Ihrer behördlichen Identifikationsnummer können verwendet werden, um sich bei Unternehmen als Sie auszugeben oder Ihr Passwort zurückzusetzen.
Wenn ein Angriff erfolgreich ist, können Kunden das Vertrauen in das Unternehmen verlieren. Die Wiederherstellung nach Systemschäden oder behördlichen Bußgeldern kann Millionen von Dollar kosten.
Aber für dich muss es nicht so enden.
Besiege SQL Injection
Die SQL-Injection kann verhindert werden, indem Teile Ihrer Anwendung eindeutig gekennzeichnet werden, sodass der Computer weiß, ob es sich bei einem bestimmten Teil um Daten oder Code handelt, der ausgeführt werden muss. Dies kann mithilfe parametrisierter Abfragen erfolgen.
Wenn SQL-Abfragen Parameter verwenden, verwendet der SQL-Interpreter die Parameter nur als Daten. Er führt ihn nicht als Code aus.
Beispielsweise funktioniert ein Angriff wie '“ OR 1=1" nicht. Die Datenbank sucht nach der Zeichenfolge „OR 1=1" und findet sie nicht in der Datenbank. Es zuckt einfach mit den Achseln und sagt: „Entschuldigung, ich kann das nicht für dich finden.“
Ein Beispiel für eine parametrisierte Abfrage in Java sieht so aus:

Die meisten Entwicklungsframeworks bieten integrierte Schutzmaßnahmen gegen SQL-Injection.
Objektrelationale Mapper (ORMs), wie Entitätsframework in der .NET-Familie parametrisiert Abfragen standardmäßig. Dadurch wird die SQL-Injektion erledigt, ohne dass Sie sich darum kümmern müssen.
Sie müssen jedoch wissen, wie Ihr spezielles ORM funktioniert. Zum Beispiel Überwintern, ein beliebtes ORM in der Java-Welt, kann immer noch verwundbar sein bei falscher Verwendung zur SQL-Injection.
Die Parametrisierung von Abfragen ist die erste und beste Verteidigung, aber es gibt noch andere. Gespeicherte Prozeduren unterstützen auch SQL-Parameter und können verwendet werden, um eine SQL-Injektion zu verhindern. Beachten Sie, dass die gespeicherten Prozeduren muss auch richtig gebaut werden damit das funktioniert.
//Das sollte auch WIRKLICH validiert werden
Zeichenfolge customname = request.getParameter („customerName“);
//Eingabevalidierung durchführen, um Angriffe zu erkennen
Zeichenkettenabfrage = „WÄHLEN SIE account_balance AUS user_data AUS WO user_name =? „;
PreparedStatement pstmt = Connection.PreparedStatement (Abfrage);
pstmt.setString (1, benutzerdefinierter Name);
ResultSet-Ergebnisse = pstmt.executeQuery ();
Validieren und desinfizieren Sie Ihre Eingaben immer. Da einige Zeichen, wie z. B. „OR 1=1", nicht von einem legitimen Benutzer Ihrer Anwendung eingegeben werden, müssen Sie sie nicht zulassen. Sie können dem Benutzer eine Fehlermeldung anzeigen oder sie aus Ihrer Eingabe entfernen, bevor Sie sie verarbeiten.
Verlassen Sie sich dabei nicht allein auf Validierung und Desinfektion, um sich zu schützen. Kluge Menschen haben Wege gefunden, das zu umgehen. Das sind gute Defense-in-Depth-Strategien (DiD), aber Parametrisierung ist der todsichere Weg, um alle Grundlagen abzudecken.
Eine weitere gute DiD-Strategie besteht darin, die „geringsten Rechte“ innerhalb der Datenbank zu verwenden und Eingaben auf die Whitelist zu setzen. Die Durchsetzung der geringsten Rechte bedeutet, dass Ihre Anwendung innerhalb der Datenbank nicht über unbegrenzte Funktionen verfügt. Sollte sich ein Angreifer Zugriff verschaffen, ist der Schaden, den er anrichten kann, begrenzt.
OWASP hat eine großartige Spickzettel für SQL-Injection verfügbar, um zu zeigen, wie man mit dieser Sicherheitslücke in mehreren Sprachen und Plattformen umgeht... aber wenn Sie noch einen Schritt weiter gehen möchten, können Sie jetzt auf unserer Plattform eine SQL Injection-Challenge in Ihrer bevorzugten Sprache spielen; hier sind einige der beliebtesten, um loszulegen:
SQL-Injektion in Python Django
Die Reise beginnt
Sie haben große Fortschritte beim Verständnis von SQL Injection und den zur Behebung des Problems erforderlichen Schritte erzielt. Fantastisch!
Wir haben besprochen, wie eine SQL-Injection abläuft. In der Regel verwendet ein Angreifer Eingaben, um Ihre Datenbankabfragen für seine eigenen schändlichen Zwecke zu steuern.
Wir haben auch den Schaden gesehen, der durch die Ausnutzung von SQL-Injection-Schwachstellen verursacht wird: Konten können kompromittiert werden und Millionen von Dollar verloren gehen... ein Albtraum und noch dazu ein teurer.
Wir haben gesehen, wie eine SQL-Injektion verhindert werden kann:
- Parametrisierung von Abfragen
- Verwenden objektrelationaler Mapper und gespeicherter Prozeduren
- Benutzereingaben validieren und auf die Whitelist setzen
Jetzt liegt es an dir. Üben ist der beste Weg, um weiter zu lernen und sich weiterzuentwickeln. Schauen Sie sich doch unsere an Ressourcen zum Lernen auf SQL Injection, dann probiere unsere kostenlose Demo von der Plattform? Du bist auf dem besten Weg, ein Secure Code Warrior zu werden.

Einfach ausgedrückt ist SQL (oder Structured Query Language) die Sprache, die für die Kommunikation mit relationalen Datenbanken verwendet wird; es ist die Abfragesprache, die von Entwicklern, Datenbankadministratoren und Anwendungen zur Verwaltung der täglich werden riesige Datenmengen generiert.
Unsere Daten werden schnell zu einem der wertvollsten Rohstoffe der Welt... und wenn etwas wertvoll ist, werden Bösewichte es zu ihrem Vorteil in die Hände bekommen wollen.
Angreifer verwenden SQL-Injection -- eine der ältesten (seit 1998!) und die lästigsten Datenlücken, die es gibt — zum Stehlen und Ändern vertraulicher Informationen, die in Millionen von Datenbanken auf der ganzen Welt verfügbar sind. Es ist heimtückisch, und Entwickler müssen verstehen, wie SQL-Injection funktioniert (und wie wir uns davor schützen können), wenn wir unsere Daten schützen wollen.
Zu diesem Zweck werden wir drei wichtige Aspekte der SQL-Injection erörtern:
- So funktioniert es
- Warum es so gefährlich ist
- Wie kann man sich dagegen wehren
Verstehen Sie SQL Injection
SQL-Injection kann mit einem Wort verstanden werden: Kontext.
Innerhalb einer Anwendung gibt es zwei Kontexte: einen für Daten, den anderen für Code. Der Codekontext teilt dem Computer mit, was ausgeführt werden soll, und trennt ihn von den zu verarbeitenden Daten.
Eine SQL-Injection tritt auf, wenn ein Angreifer Daten eingibt, die vom SQL-Interpreter fälschlicherweise als Code behandelt werden.
Ein Beispiel ist ein Eingabefeld auf einer Website, in das ein Angreifer '“ OR 1=1" eingibt und es an das Ende einer SQL-Abfrage angehängt wird. Wenn diese Abfrage ausgeführt wird, gibt sie für jede Zeile in der Datenbank „true“ zurück. Das bedeutet, dass alle Datensätze aus der abgefragten Tabelle zurückgegeben werden.
Die Auswirkungen der SQL-Injection können katastrophal sein. Tritt dies auf einer Anmeldeseite auf, werden möglicherweise alle Benutzerdatensätze zurückgegeben, möglicherweise einschließlich Benutzernamen und Kennwörtern. Wenn eine einfache Abfrage zum Herausnehmen von Daten erfolgreich ist, gilt dies auch für Abfragen zum Ändern von Daten.
Schauen wir uns einen anfälligen Code an, damit Sie sehen können, wie eine SQL-Injection-Schwachstelle in der Natur aussieht.
Schau dir diesen Code an:
Zeichenkettenabfrage = „WÄHLEN SIE DEN KONTOSTAND VON user_data WHERE user_name =“
+ request.getParameter („Kundenname“);
versuche {
Anweisungsanweisung = Connection.createStatement (...);
ResultSet-Ergebnisse = Statement.executeQuery (Abfrage);
}
Der Code hier hängt einfach die Parameterinformationen vom Client ohne Validierung an das Ende der SQL-Abfrage an. In diesem Fall kann ein Angreifer Code in ein Eingabefeld oder URL-Parameter eingeben und dieser wird ausgeführt.
Das Wichtigste ist nicht, dass Angreifer jeder SELECT-Abfrage nur '“ OR 1=1" hinzufügen können, sondern dass ein Angreifer jede Art von SQL-Abfrage (INSERT, UPDATE, DELETE, DROP usw.) manipulieren und sie um alles erweitern kann, was die Datenbank unterstützt. Es gibt großartige Ressourcen und öffentlich verfügbare Tools, die zeigen, was möglich ist.

Wir werden bald lernen, wie wir dieses Problem beheben können. Lassen Sie uns zunächst verstehen, wie viel Schaden angerichtet werden kann.
Warum SQL Injection so gefährlich ist
Hier sind nur drei Beispiele für Sicherheitslücken, die durch SQL-Injection verursacht wurden:
- Website des Wahlausschusses von Illinois wurde verletzt aufgrund von SQL-Injection-Schwachstellen. Die Angreifer stahlen die persönlichen Daten von 200.000 US-Bürgern. Aufgrund der Art der festgestellten Sicherheitslücke hätten die Angreifer die Daten ebenfalls ändern können, obwohl sie dies nicht getan haben.
- Hetzner, ein südafrikanisches Website-Hosting-Unternehmen, wurde verletzt in Höhe von 40.000 Kundendatensätzen. Eine SQL-Injection-Schwachstelle führte zum möglichen Diebstahl aller Kundendatensätze in ihrer Datenbank.
- Ein katholischer Finanzdienstleister in Minnesota, Vereinigte Staaten, wurde verletzt mit SQL Injection. Kontodaten, einschließlich Kontonummern, von fast 130.000 Kunden wurden gestohlen.
Sensible Daten können verwendet werden, um Konten zu übernehmen, Passwörter zurückzusetzen, Geld zu stehlen oder Betrug zu begehen.
Sogar Informationen, die nicht als sensibel oder persönlich identifizierbar gelten, können für andere Angriffe verwendet werden. Adressinformationen oder die letzten vier Ziffern Ihrer behördlichen Identifikationsnummer können verwendet werden, um sich bei Unternehmen als Sie auszugeben oder Ihr Passwort zurückzusetzen.
Wenn ein Angriff erfolgreich ist, können Kunden das Vertrauen in das Unternehmen verlieren. Die Wiederherstellung nach Systemschäden oder behördlichen Bußgeldern kann Millionen von Dollar kosten.
Aber für dich muss es nicht so enden.
Besiege SQL Injection
Die SQL-Injection kann verhindert werden, indem Teile Ihrer Anwendung eindeutig gekennzeichnet werden, sodass der Computer weiß, ob es sich bei einem bestimmten Teil um Daten oder Code handelt, der ausgeführt werden muss. Dies kann mithilfe parametrisierter Abfragen erfolgen.
Wenn SQL-Abfragen Parameter verwenden, verwendet der SQL-Interpreter die Parameter nur als Daten. Er führt ihn nicht als Code aus.
Beispielsweise funktioniert ein Angriff wie '“ OR 1=1" nicht. Die Datenbank sucht nach der Zeichenfolge „OR 1=1" und findet sie nicht in der Datenbank. Es zuckt einfach mit den Achseln und sagt: „Entschuldigung, ich kann das nicht für dich finden.“
Ein Beispiel für eine parametrisierte Abfrage in Java sieht so aus:

Die meisten Entwicklungsframeworks bieten integrierte Schutzmaßnahmen gegen SQL-Injection.
Objektrelationale Mapper (ORMs), wie Entitätsframework in der .NET-Familie parametrisiert Abfragen standardmäßig. Dadurch wird die SQL-Injektion erledigt, ohne dass Sie sich darum kümmern müssen.
Sie müssen jedoch wissen, wie Ihr spezielles ORM funktioniert. Zum Beispiel Überwintern, ein beliebtes ORM in der Java-Welt, kann immer noch verwundbar sein bei falscher Verwendung zur SQL-Injection.
Die Parametrisierung von Abfragen ist die erste und beste Verteidigung, aber es gibt noch andere. Gespeicherte Prozeduren unterstützen auch SQL-Parameter und können verwendet werden, um eine SQL-Injektion zu verhindern. Beachten Sie, dass die gespeicherten Prozeduren muss auch richtig gebaut werden damit das funktioniert.
//Das sollte auch WIRKLICH validiert werden
Zeichenfolge customname = request.getParameter („customerName“);
//Eingabevalidierung durchführen, um Angriffe zu erkennen
Zeichenkettenabfrage = „WÄHLEN SIE account_balance AUS user_data AUS WO user_name =? „;
PreparedStatement pstmt = Connection.PreparedStatement (Abfrage);
pstmt.setString (1, benutzerdefinierter Name);
ResultSet-Ergebnisse = pstmt.executeQuery ();
Validieren und desinfizieren Sie Ihre Eingaben immer. Da einige Zeichen, wie z. B. „OR 1=1", nicht von einem legitimen Benutzer Ihrer Anwendung eingegeben werden, müssen Sie sie nicht zulassen. Sie können dem Benutzer eine Fehlermeldung anzeigen oder sie aus Ihrer Eingabe entfernen, bevor Sie sie verarbeiten.
Verlassen Sie sich dabei nicht allein auf Validierung und Desinfektion, um sich zu schützen. Kluge Menschen haben Wege gefunden, das zu umgehen. Das sind gute Defense-in-Depth-Strategien (DiD), aber Parametrisierung ist der todsichere Weg, um alle Grundlagen abzudecken.
Eine weitere gute DiD-Strategie besteht darin, die „geringsten Rechte“ innerhalb der Datenbank zu verwenden und Eingaben auf die Whitelist zu setzen. Die Durchsetzung der geringsten Rechte bedeutet, dass Ihre Anwendung innerhalb der Datenbank nicht über unbegrenzte Funktionen verfügt. Sollte sich ein Angreifer Zugriff verschaffen, ist der Schaden, den er anrichten kann, begrenzt.
OWASP hat eine großartige Spickzettel für SQL-Injection verfügbar, um zu zeigen, wie man mit dieser Sicherheitslücke in mehreren Sprachen und Plattformen umgeht... aber wenn Sie noch einen Schritt weiter gehen möchten, können Sie jetzt auf unserer Plattform eine SQL Injection-Challenge in Ihrer bevorzugten Sprache spielen; hier sind einige der beliebtesten, um loszulegen:
SQL-Injektion in Python Django
Die Reise beginnt
Sie haben große Fortschritte beim Verständnis von SQL Injection und den zur Behebung des Problems erforderlichen Schritte erzielt. Fantastisch!
Wir haben besprochen, wie eine SQL-Injection abläuft. In der Regel verwendet ein Angreifer Eingaben, um Ihre Datenbankabfragen für seine eigenen schändlichen Zwecke zu steuern.
Wir haben auch den Schaden gesehen, der durch die Ausnutzung von SQL-Injection-Schwachstellen verursacht wird: Konten können kompromittiert werden und Millionen von Dollar verloren gehen... ein Albtraum und noch dazu ein teurer.
Wir haben gesehen, wie eine SQL-Injektion verhindert werden kann:
- Parametrisierung von Abfragen
- Verwenden objektrelationaler Mapper und gespeicherter Prozeduren
- Benutzereingaben validieren und auf die Whitelist setzen
Jetzt liegt es an dir. Üben ist der beste Weg, um weiter zu lernen und sich weiterzuentwickeln. Schauen Sie sich doch unsere an Ressourcen zum Lernen auf SQL Injection, dann probiere unsere kostenlose Demo von der Plattform? Du bist auf dem besten Weg, ein Secure Code Warrior zu werden.

Klicken Sie auf den untenstehenden Link und laden Sie das PDF dieser Ressource herunter.
Secure Code Warrior für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Bericht ansehenEine Demo buchenJaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.
Einfach ausgedrückt ist SQL (oder Structured Query Language) die Sprache, die für die Kommunikation mit relationalen Datenbanken verwendet wird; es ist die Abfragesprache, die von Entwicklern, Datenbankadministratoren und Anwendungen zur Verwaltung der täglich werden riesige Datenmengen generiert.
Unsere Daten werden schnell zu einem der wertvollsten Rohstoffe der Welt... und wenn etwas wertvoll ist, werden Bösewichte es zu ihrem Vorteil in die Hände bekommen wollen.
Angreifer verwenden SQL-Injection -- eine der ältesten (seit 1998!) und die lästigsten Datenlücken, die es gibt — zum Stehlen und Ändern vertraulicher Informationen, die in Millionen von Datenbanken auf der ganzen Welt verfügbar sind. Es ist heimtückisch, und Entwickler müssen verstehen, wie SQL-Injection funktioniert (und wie wir uns davor schützen können), wenn wir unsere Daten schützen wollen.
Zu diesem Zweck werden wir drei wichtige Aspekte der SQL-Injection erörtern:
- So funktioniert es
- Warum es so gefährlich ist
- Wie kann man sich dagegen wehren
Verstehen Sie SQL Injection
SQL-Injection kann mit einem Wort verstanden werden: Kontext.
Innerhalb einer Anwendung gibt es zwei Kontexte: einen für Daten, den anderen für Code. Der Codekontext teilt dem Computer mit, was ausgeführt werden soll, und trennt ihn von den zu verarbeitenden Daten.
Eine SQL-Injection tritt auf, wenn ein Angreifer Daten eingibt, die vom SQL-Interpreter fälschlicherweise als Code behandelt werden.
Ein Beispiel ist ein Eingabefeld auf einer Website, in das ein Angreifer '“ OR 1=1" eingibt und es an das Ende einer SQL-Abfrage angehängt wird. Wenn diese Abfrage ausgeführt wird, gibt sie für jede Zeile in der Datenbank „true“ zurück. Das bedeutet, dass alle Datensätze aus der abgefragten Tabelle zurückgegeben werden.
Die Auswirkungen der SQL-Injection können katastrophal sein. Tritt dies auf einer Anmeldeseite auf, werden möglicherweise alle Benutzerdatensätze zurückgegeben, möglicherweise einschließlich Benutzernamen und Kennwörtern. Wenn eine einfache Abfrage zum Herausnehmen von Daten erfolgreich ist, gilt dies auch für Abfragen zum Ändern von Daten.
Schauen wir uns einen anfälligen Code an, damit Sie sehen können, wie eine SQL-Injection-Schwachstelle in der Natur aussieht.
Schau dir diesen Code an:
Zeichenkettenabfrage = „WÄHLEN SIE DEN KONTOSTAND VON user_data WHERE user_name =“
+ request.getParameter („Kundenname“);
versuche {
Anweisungsanweisung = Connection.createStatement (...);
ResultSet-Ergebnisse = Statement.executeQuery (Abfrage);
}
Der Code hier hängt einfach die Parameterinformationen vom Client ohne Validierung an das Ende der SQL-Abfrage an. In diesem Fall kann ein Angreifer Code in ein Eingabefeld oder URL-Parameter eingeben und dieser wird ausgeführt.
Das Wichtigste ist nicht, dass Angreifer jeder SELECT-Abfrage nur '“ OR 1=1" hinzufügen können, sondern dass ein Angreifer jede Art von SQL-Abfrage (INSERT, UPDATE, DELETE, DROP usw.) manipulieren und sie um alles erweitern kann, was die Datenbank unterstützt. Es gibt großartige Ressourcen und öffentlich verfügbare Tools, die zeigen, was möglich ist.

Wir werden bald lernen, wie wir dieses Problem beheben können. Lassen Sie uns zunächst verstehen, wie viel Schaden angerichtet werden kann.
Warum SQL Injection so gefährlich ist
Hier sind nur drei Beispiele für Sicherheitslücken, die durch SQL-Injection verursacht wurden:
- Website des Wahlausschusses von Illinois wurde verletzt aufgrund von SQL-Injection-Schwachstellen. Die Angreifer stahlen die persönlichen Daten von 200.000 US-Bürgern. Aufgrund der Art der festgestellten Sicherheitslücke hätten die Angreifer die Daten ebenfalls ändern können, obwohl sie dies nicht getan haben.
- Hetzner, ein südafrikanisches Website-Hosting-Unternehmen, wurde verletzt in Höhe von 40.000 Kundendatensätzen. Eine SQL-Injection-Schwachstelle führte zum möglichen Diebstahl aller Kundendatensätze in ihrer Datenbank.
- Ein katholischer Finanzdienstleister in Minnesota, Vereinigte Staaten, wurde verletzt mit SQL Injection. Kontodaten, einschließlich Kontonummern, von fast 130.000 Kunden wurden gestohlen.
Sensible Daten können verwendet werden, um Konten zu übernehmen, Passwörter zurückzusetzen, Geld zu stehlen oder Betrug zu begehen.
Sogar Informationen, die nicht als sensibel oder persönlich identifizierbar gelten, können für andere Angriffe verwendet werden. Adressinformationen oder die letzten vier Ziffern Ihrer behördlichen Identifikationsnummer können verwendet werden, um sich bei Unternehmen als Sie auszugeben oder Ihr Passwort zurückzusetzen.
Wenn ein Angriff erfolgreich ist, können Kunden das Vertrauen in das Unternehmen verlieren. Die Wiederherstellung nach Systemschäden oder behördlichen Bußgeldern kann Millionen von Dollar kosten.
Aber für dich muss es nicht so enden.
Besiege SQL Injection
Die SQL-Injection kann verhindert werden, indem Teile Ihrer Anwendung eindeutig gekennzeichnet werden, sodass der Computer weiß, ob es sich bei einem bestimmten Teil um Daten oder Code handelt, der ausgeführt werden muss. Dies kann mithilfe parametrisierter Abfragen erfolgen.
Wenn SQL-Abfragen Parameter verwenden, verwendet der SQL-Interpreter die Parameter nur als Daten. Er führt ihn nicht als Code aus.
Beispielsweise funktioniert ein Angriff wie '“ OR 1=1" nicht. Die Datenbank sucht nach der Zeichenfolge „OR 1=1" und findet sie nicht in der Datenbank. Es zuckt einfach mit den Achseln und sagt: „Entschuldigung, ich kann das nicht für dich finden.“
Ein Beispiel für eine parametrisierte Abfrage in Java sieht so aus:

Die meisten Entwicklungsframeworks bieten integrierte Schutzmaßnahmen gegen SQL-Injection.
Objektrelationale Mapper (ORMs), wie Entitätsframework in der .NET-Familie parametrisiert Abfragen standardmäßig. Dadurch wird die SQL-Injektion erledigt, ohne dass Sie sich darum kümmern müssen.
Sie müssen jedoch wissen, wie Ihr spezielles ORM funktioniert. Zum Beispiel Überwintern, ein beliebtes ORM in der Java-Welt, kann immer noch verwundbar sein bei falscher Verwendung zur SQL-Injection.
Die Parametrisierung von Abfragen ist die erste und beste Verteidigung, aber es gibt noch andere. Gespeicherte Prozeduren unterstützen auch SQL-Parameter und können verwendet werden, um eine SQL-Injektion zu verhindern. Beachten Sie, dass die gespeicherten Prozeduren muss auch richtig gebaut werden damit das funktioniert.
//Das sollte auch WIRKLICH validiert werden
Zeichenfolge customname = request.getParameter („customerName“);
//Eingabevalidierung durchführen, um Angriffe zu erkennen
Zeichenkettenabfrage = „WÄHLEN SIE account_balance AUS user_data AUS WO user_name =? „;
PreparedStatement pstmt = Connection.PreparedStatement (Abfrage);
pstmt.setString (1, benutzerdefinierter Name);
ResultSet-Ergebnisse = pstmt.executeQuery ();
Validieren und desinfizieren Sie Ihre Eingaben immer. Da einige Zeichen, wie z. B. „OR 1=1", nicht von einem legitimen Benutzer Ihrer Anwendung eingegeben werden, müssen Sie sie nicht zulassen. Sie können dem Benutzer eine Fehlermeldung anzeigen oder sie aus Ihrer Eingabe entfernen, bevor Sie sie verarbeiten.
Verlassen Sie sich dabei nicht allein auf Validierung und Desinfektion, um sich zu schützen. Kluge Menschen haben Wege gefunden, das zu umgehen. Das sind gute Defense-in-Depth-Strategien (DiD), aber Parametrisierung ist der todsichere Weg, um alle Grundlagen abzudecken.
Eine weitere gute DiD-Strategie besteht darin, die „geringsten Rechte“ innerhalb der Datenbank zu verwenden und Eingaben auf die Whitelist zu setzen. Die Durchsetzung der geringsten Rechte bedeutet, dass Ihre Anwendung innerhalb der Datenbank nicht über unbegrenzte Funktionen verfügt. Sollte sich ein Angreifer Zugriff verschaffen, ist der Schaden, den er anrichten kann, begrenzt.
OWASP hat eine großartige Spickzettel für SQL-Injection verfügbar, um zu zeigen, wie man mit dieser Sicherheitslücke in mehreren Sprachen und Plattformen umgeht... aber wenn Sie noch einen Schritt weiter gehen möchten, können Sie jetzt auf unserer Plattform eine SQL Injection-Challenge in Ihrer bevorzugten Sprache spielen; hier sind einige der beliebtesten, um loszulegen:
SQL-Injektion in Python Django
Die Reise beginnt
Sie haben große Fortschritte beim Verständnis von SQL Injection und den zur Behebung des Problems erforderlichen Schritte erzielt. Fantastisch!
Wir haben besprochen, wie eine SQL-Injection abläuft. In der Regel verwendet ein Angreifer Eingaben, um Ihre Datenbankabfragen für seine eigenen schändlichen Zwecke zu steuern.
Wir haben auch den Schaden gesehen, der durch die Ausnutzung von SQL-Injection-Schwachstellen verursacht wird: Konten können kompromittiert werden und Millionen von Dollar verloren gehen... ein Albtraum und noch dazu ein teurer.
Wir haben gesehen, wie eine SQL-Injektion verhindert werden kann:
- Parametrisierung von Abfragen
- Verwenden objektrelationaler Mapper und gespeicherter Prozeduren
- Benutzereingaben validieren und auf die Whitelist setzen
Jetzt liegt es an dir. Üben ist der beste Weg, um weiter zu lernen und sich weiterzuentwickeln. Schauen Sie sich doch unsere an Ressourcen zum Lernen auf SQL Injection, dann probiere unsere kostenlose Demo von der Plattform? Du bist auf dem besten Weg, ein Secure Code Warrior zu werden.
Inhaltsverzeichnis
Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

Secure Code Warrior für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Eine Demo buchenHerunterladenRessourcen für den Einstieg
Themen und Inhalte der Securecode-Schulung
Unsere branchenführenden Inhalte werden ständig weiterentwickelt, um der sich ständig ändernden Softwareentwicklungslandschaft unter Berücksichtigung Ihrer Rolle gerecht zu werden. Themen, die alles von KI bis XQuery Injection abdecken und für eine Vielzahl von Rollen angeboten werden, von Architekten und Ingenieuren bis hin zu Produktmanagern und QA. Verschaffen Sie sich einen kleinen Einblick in das Angebot unseres Inhaltskatalogs nach Themen und Rollen.
Die Kamer van Koophandel setzt Maßstäbe für entwicklergesteuerte Sicherheit in großem Maßstab
Die Kamer van Koophandel berichtet, wie sie sicheres Codieren durch rollenbasierte Zertifizierungen, Trust Score-Benchmarking und eine Kultur der gemeinsamen Verantwortung für Sicherheit in die tägliche Entwicklungsarbeit integriert hat.
Bedrohungsmodellierung mit KI: So wird jeder Entwickler zum Bedrohungsmodellierer
Sie werden besser gerüstet sein, um Entwicklern dabei zu helfen, Ideen und Techniken zur Bedrohungsmodellierung mit den KI-Tools zu kombinieren, die sie bereits verwenden, um die Sicherheit zu erhöhen, die Zusammenarbeit zu verbessern und von Anfang an widerstandsfähigere Software zu entwickeln.
Ressourcen für den Einstieg
Cybermon ist zurück: Beat the Boss KI-Missionen jetzt auf Abruf verfügbar
Cybermon 2025 Beat the Boss ist jetzt das ganze Jahr über in SCW verfügbar. Setzt fortschrittliche KI/LLM-Sicherheitsanforderungen ein, um die sichere KI-Entwicklung in einem großen Maßstab zu stärken.
Cyber-Resilienz-Gesetz erklärt: Was das für die Entwicklung von Secure by Design-Software bedeutet
Erfahren Sie, was der EU Cyber Resilience Act (CRA) verlangt, für wen er gilt und wie sich Entwicklungsteams mit sicheren Methoden, der Vorbeugung von Sicherheitslücken und dem Aufbau von Fähigkeiten für Entwickler darauf vorbereiten können.
Enabler 1: Definierte und messbare Erfolgskriterien
Enabler 1 eröffnet unsere zehnteilige Reihe „Enabler of Success“ und zeigt, wie sichere Codierung mit Geschäftsergebnissen wie Risikominderung und Geschwindigkeit verbunden werden kann, um eine langfristige Programmreife zu erreichen.




%20(1).avif)
.avif)
