Worring Media Multimedia- & IT-Solutions – Webentwicklung und Webdesign aus Bad Salzuflen

SQL-Injections und Cross-Site-Scripting

SQL-Injections und Cross-Site-Scripting

Bei den populärsten Sicherheitslücken im Web stehen SQL-Injections und Cross-Site-Scripting an der Spitze.

SQL-Injection

Bei einer SQL-Injection wird (z.B. über Texteingabefelder auf einer Website oder in einer Webanwendung) versucht, mit speziell eingeschleustem Code die Steuerung einer Datenbank zu übernehmen. Das Kürzel SQL steht hierbei für die Structured Query Language – dabei handelt es sich um eine Abfrage- bzw. Steuersprache für relationale Da­tenbanken, deren Syntax an die menschliche Sprache an­gelehnt ist.

So bedeutet das Kommando:

SELECT name FROM kunde WHERE kundennummer > 100;

beispielsweise in menschlicher Sprache:

Hole alle Werte der Spalte „name“ aus der Tabelle „kunde“, deren Wert „kundennummer“ größer 100 ist.

Bei einer Website oder Webanwendung werden diese SQL- Strings (Zeichenketten) in einer serverseitigen Program­miersprache zur dynamischen Steuerung an die Daten­bank übergeben.

Ein unerfahrener Programmierer/Entwickler entscheidet sich – wie in folgendem PHP-Beispiel – oft für die zu­nächst einfachste und naheliegendste Lösung der Zusam­mensetzung eines SQL-Kommandos:

"SELECT name FROM kunde WHERE kundennummer = ".$_GET['kundennr']

In der Variable (bzw. im „Array“) $_GET befinden sich die per „GET“ an die Website/Anwendung übergebenen Vari­ablen. Hierbei handelt es sich um die Zeichenketten, die der URL (der „Adresse“ der Website) angehängt werden, z.B.:

http://www.example.com/seite.php?kundennr=12345

Die Gefahr liegt nun in der übergebenen Kundennummer. Was, wenn es sich hierbei nicht wie erwartet um einen „normalen“ Wert handelt, sondern um beispielsweise:

1; DELETE FROM kunde;
Alles nach dem Semikolon wird als neues bzw. zweites Kommando aufgefasst. Die resultierende Abfrage an die Datenbank sähe also folgendermaßen aus:

SELECT name FROM kunde WHERE kundennummer = 1; DELETE FROM kunde;

Diese Abfrage löscht sämtliche Daten der Tabelle „kunde“. Über eine solche „Code-Injektion“ lassen sich Datenbank­abfragen nahezu beliebig manipulieren – der Angreifer kann so nahezu volle Kontrolle über die Datenbank er­langen.

Besteht (z.B. über eine solche SQL-Injection) erst einmal Kontrolle über an eine Website oder Webanwendung an­geschlossene Datenbank, lässt sich allerhand Schindluder treiben – es können fast nach Belieben z.B. Benutzerna­men, Passwörter, Inhalte von Seiten oder sonstige Daten ausgespäht, geändert oder gelöscht werden.

Cross-Site-Scripting

Sehr beliebt ist in diesem Zusammenhang das sogenannte Cross-Site-Scripting: So ist es z.B. möglich, per in die Da­tenbank injiziertem JavaScript-Code Seiten umzuleiten, unerwünschte Werbung auf einer Webseite einzublenden, Benutzernamen und Passwörter abzugreifen und vieles mehr.

Was hilft gegen solche Sicherheitslücken?

Software ist nie fehlerfrei – um so größer und komplexer das Projekt, um so höher die Wahrscheinlichkeit einer über­sehenen Sicherheitslücke. Insbesondere die Anfäl­ligkeit ei­ner Website oder Webanwendung für SQL-Injec­tions und daraus resultierendem Cross-Site-Scripting gehören aller­dings zu den populärsten Fehlern, die sich mit ein wenig Sorgfalt und relativ geringem Aufwand vermeiden lassen.

Grundsätzlich gilt die Devise:
Traue niemals Benutzereingaben!

Jede Eingabe eines Benutzers muss validiert/überprüft wer­den. Bei Datenbankabfragen haben sich darüber hinaus so­genannte „Prepared Statements“ bewährt:

Hier wird das SQL-Statement isoliert von den überge­be­nen Werten betrachtet – eine Manipulation der ei­gent­lichen SQL-Abfrage durch eine Benutzereingabe ist so nicht mehr möglich.

JavaScript

JavaScript (nicht zu verwechseln mit Java) ist eine Pro­grammiersprache für Browser und ein integraler Bestand­teil von Webentwicklung und Webdesign. Sie ermöglicht auf Websites diverse Funktionalitäten, die mit reinem HTML nicht möglich sind.

Erfahren Sie mehr über JavaScript im Blog.

Weitere Informationen finden Sie im Wikipedia-Artikel zu JavaScript (externer Link).

Fenster schließen
PHP

Bei PHP (PHP Hypertext Preprocessor – ein sogenanntes rekursives Akronym, bei dem der erste Buchstabe der Ab­kürzung wiederum die gesamte Abkürzung ergibt) handelt es sich um eine serverseitige Skriptsprache. Ein in PHP geschriebenes Programm läuft meist auf einem Webser­ver. Greift ein Benutzer mit seinem Browser auf den Server zu, wird das PHP-Skript ausgeführt und gibt ent­sprechende Ausgaben zurück.

Dies ermöglicht dynamische Webseiten und Webanwen­dungen mit Datenbank-Anbindung wie z.B. Webshops oder Foren.

Weitere Informationen finden Sie im Wikipedia-Artikel zu PHP (externer Link).

Fenster schließen