Jan Hagemeister demonstrierte anhand eines SQL-Queries zur Überprüfung von Benutzername und Passwort die Anfälligkeit von SQL-Abfragen für sogenannte SQL-Injection Attacken.

Im gezeigten Beispiel wurde anhand einer Benutzereingabe geprüft, ob die Daten aus den Eingabefeldern mit den in einer Tabelle hinterlegten Zugangsdaten übereinstimmen. Aus der Übereinstimmung wurde berechnet, ob der Zugang erfolgen darf bzw. wegen des falschen Passworts verweigert wird. Dazu wurden in der gezeigten Beispiel-Datei unterschiedliche Methoden einer SQL-Abfrage verwendet. Diese unterschieden sich dadurch, dass die Texte aus den Eingabefeldern einmal per String-Verkettung direkt in den SQL-Query übernommen wurden, bzw. die Eingaben als Parameter per ?-Platzhalter in den Query übergeben wurden.

Dabei zeigte sich, dass die String-Verkettung anfällig für eine Manipulation des Queries durch weitere SQL-Befehle ist. Wurden im Eingabefeld z.B. weitere SQL-Bedingungen per “OR” oder “UNION” Kommando ergänzt, ließ sich die gesamte Abfrage verändern und damit die Überprüfung umgehen. Möglich wurde dies dadurch, dass weitere Befehle durch geschickte Platzierung von Hochkommata innerhalb der Eingabe in den SQL-Query injiziert wurden – daher auch die Bezeichnung “SQL-Injection”. Sofern das Ergebnis der Abfrage auf dem Layout angezeigt wird, konnten auf diesem Wege sogar Inhalte aus anderen Tabellen ausgelesen und angezeigt werden, die nicht für den Benutzer bestimmt waren. Im Extremfall ließen sich durch geschickte Kombination der SQL-Befehle in der Abfrage sogar Passwörter im Klartext auslesen und anzeigen.

Klares Fazit hierbei ist, dass niemals Eingabefelder per String-Verkettung in einen SQL-Query übernommen werden sollten. Verwendet man hingegen die Parameter-Übergabe per ?-Platzhalter, ist zumindest ein sauberes Escaping der Eingaben gewährleistet, so dass in der Eingabe enthaltene Hochkommata die Struktur des SQL-Queries nicht verändern können.

Für weiter reichenden Schutz ist es ggf. ratsam, bestimmte Schlüsselbegriffe aus den Eingabewerten zu filtern. Dies gilt ebenso bei der Verwendung von API-Abfragen oder dem Einsatz des “Evaluate”-Befehls im Zusammenspiel mit Benutzereingaben.

SQL-Injection
https://de.wikipedia.org/wiki/SQL-Injection

FileMaker Funktion “SQLAusführen”
https://help.claris.com/de/pro-help/content/executesql.html

MBS Blog: SQL injections
https://www.mbsplugins.de/archive/2019-11-25/SQL_injections/monkeybreadsoftware_blog_archive