Cross-Site Scripting und SQL-Injection

Löschen ganzer Tabellen

Auf den zweiten Blick sieht die Sache aber anders aus. Angenommen, der Angreifer nutzt nicht den oben genannten String, sondern folgenden:

'; drop table users --

Das Resultat ist heftig: Durch den Hochhaken und das Semikolon wird der erste SQL-Befehl effektiv beendet, ohne irgendwelche Auswirkungen zu haben - aber nach dem Semikolon fügt der Angreifer einen weiteren SQL-Befehl an: Und dieser löscht Ihnen die komplette User-Tabelle.

Zugegeben, damit das gelingt, muss der Angreifer auch noch das Glück haben, dass die SQL-Verbindung falsch konfiguriert ist, denn bei einer vernünftigen Konfiguration würde "drop table" an mangelnden Rechten scheitern. Wer aber Abfragen dieser Art ungefiltert zulässt, wird vermutlich die Rechte im Datenbank-Server auch nicht sonderlich sinnvoll vergeben haben. (Tipp: Ihre Webanwendung sollte, sofern möglich, nur mit Accounts arbeiten, die aus der Datenbank lesen dürfen - und auch nur die Tabellen, die tatsächlich für die Allgemeinheit gedacht sind.)

Einen Angriff, infolge dessen die User-Tabelle komplett gelöscht wurde, bemerken Sie sicherlich schnell - schließlich kann sich niemand mehr an Ihrer Anwendung anmelden. Der Angreifer kann aber auch andere Kommandos per SQL an die Datenbank schicken. An einer passenden Stelle eingefügt, kommt er zum Beispiel leicht an alle Benutzer-Accounts Ihrer Webanwendung, oder aber er verändert die Daten der Benutzer.