SQL-Injection (SQLi)

Mar 12 2023
Hallo, vielen Dank, dass Sie sich die Zeit genommen haben, den Artikel zu lesen! Ich schätze es! Der heutige Inhalt wird sich mit dem Verständnis von „SQL-Injection“ befassen. Der Inhalt basiert vollständig auf meinen persönlichen Erfahrungen und Kenntnissen, Interaktionen mit großartigen Leuten im Bereich App Sec und Softwareentwicklung sowie viel Lektüre und sicheres Codieren. In diesem Artikel werde ich versuchen, den Inhalt grundsätzlich zu vereinfachen.
Lasst uns gemeinsam lernen | SQL-Injektion

Hallo,

Vielen Dank, dass Sie sich die Zeit genommen haben, den Artikel zu lesen! Ich schätze es!

Der heutige Inhalt wird sich mit dem Verständnis von „SQL-Injection“ befassen.

Der Inhalt basiert vollständig auf meinen persönlichen Erfahrungen und Kenntnissen, Interaktionen mit unglaublichen Leuten im Bereich App Sec und Softwareentwicklung sowie viel Lektüre und sicheres Codieren.

In diesem Artikel werde ich versuchen, den Inhalt grundsätzlich zu vereinfachen. Ich bin sicher, dass die Leser ihre eigenen Gedanken und Kommentare haben werden, und ich freue mich über jedes Feedback und jede Diskussion.

Ansichten/Kommentare/Meinungen sind meine eigenen und nicht die meines früheren/aktuellen Arbeitgebers.

Lasst uns gemeinsam lernen!

Was ist SQL-Injection?

Eine Art Anwendungssicherheitsangriff, bei dem ein böswilliger Akteur bösartigen SQL-Code in ein anfälliges Eingabefeld einfügt, um auf Daten in einer Datenbank zuzugreifen und diese zu manipulieren. SQLi ermöglicht es dem Angreifer, Daten in einer Datenbank anzuzeigen, zu ändern oder zu löschen.

Wie kann ich SQLi reparieren?

Verketten Sie keine SQL-Abfragen und Eingabewerte.

Führen Sie immer eine Eingabevalidierung durch ( meiner persönlichen Meinung nach schreckt sie tatsächlich viele bösartige Signaturen ab ) und folgen Sie dann einer der folgenden Strategien, um SQLi zu reparieren:

  1. Parametrisierte Abfragen: Übergeben Sie Eingabewerte als Parameter an SQL-Anweisungen. Dies wird durch parametrisierte Abfragen erreicht. Dadurch wird verhindert, dass böswillige Eingaben als SQL-Code ausgeführt werden.
  2. Gespeicherte Prozeduren: Es ist viel besser, keine SQL-Abfragen im Code zu haben und diese über gespeicherte Prozeduren in eine Datenbank zu verschieben.

Parametrisierte Abfragen:

Im folgenden Codebeispiel werden Name und Pass über „setString()“ als Parameter an die SQL-Anweisung übergeben. Es ist eine Methode von PreparedStatement.

....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....

Im folgenden Codebeispiel werden „Name“ und „Standort“ über „setString()“ als Parameter an die gespeicherte Prozedur „userDetails“ übergeben. Es ist eine Methode von CallableStatement. Die Ausgabe erfolgt über den Parameter „output“, der „registerOutParameter“ verwendet. Es ist eine weitere Methode von CallableStatement.

....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....

Kommentare/Feedback sind immer willkommen, da ich stets bestrebt bin, den Inhalt zu verbessern und darin besser zu werden.

Quellenbeschreibung: Meine eigene Erfahrung in App Sec, Paraphrasierung des Inhalts mehrerer Online-Websites, Open AI, DALL-E, Entwickler- und NLP-Tools.

Danke schön!

Fügen Sie mich auf LinkedIn hinzu