
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's
- 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 là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Réserver une démonstrationJaap 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's
- 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's
- 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.

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.
Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Consulter le rapportRéserver une démonstrationJaap 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's
- 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.
Table des matières
Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Réserver une démonstrationTéléchargerRessources pour débuter
Thèmes et contenus de la formation Securecode
Nos contenus de pointe sont constamment développés afin de s'adapter à l'évolution constante du paysage du développement logiciel, en tenant compte de votre rôle. Les thèmes abordés couvrent tous les domaines, de l'IA à l'injection XQuery, et sont proposés pour une multitude de rôles, des architectes et ingénieurs aux chefs de produit et responsables assurance qualité. Nous vous invitons à découvrir un aperçu de notre catalogue de contenus classés par thème et par rôle.
La Chambre de commerce établit la norme en matière de sécurité à grande échelle axée sur les développeurs
La Chambre de commerce néerlandaise explique comment elle a intégré le codage sécurisé dans le développement quotidien grâce à des certifications basées sur les rôles, à l'évaluation comparative du Trust Score et à une culture de responsabilité partagée en matière de sécurité.
Modélisation des menaces avec l'IA : transformer chaque développeur en modélisateur de menaces
Vous repartirez mieux équipé pour aider les développeurs à combiner les idées et les techniques de modélisation des menaces avec les outils d'IA qu'ils utilisent déjà pour renforcer la sécurité, améliorer la collaboration et créer des logiciels plus résilients dès le départ.
Ressources pour débuter
Cybermon est de retour : les missions KI « Beat the Boss » sont désormais disponibles sur demande.
Cybermon 2025 Beat the Boss est désormais disponible toute l'année dans SCW. Il utilise des exigences de sécurité IA/LLM avancées pour renforcer le développement sécurisé de l'IA à grande échelle.
Explication de la loi sur la cyber-résilience : implications pour le développement de logiciels sécurisés dès la conception
Découvrez les exigences de la loi européenne sur la cyber-résilience (CRA), à qui elle s'applique et comment les équipes de développement peuvent s'y préparer en adoptant des méthodes sécurisées, en prévenant les failles de sécurité et en renforçant les compétences des développeurs.
Facteur 1 : Critères de réussite définis et mesurables
Le catalyseur n° 1 inaugure notre série en dix parties intitulée « Les catalyseurs de la réussite » et démontre comment un codage sécurisé peut être associé à des résultats commerciaux tels que la réduction des risques et la rapidité afin d'atteindre une maturité programmatique à long terme.




%20(1).avif)
.avif)
