

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 Datenbanken, deren Syntax an die menschliche Sprache angelehnt 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 Programmiersprache zur dynamischen Steuerung an die Datenbank übergeben.
Ein unerfahrener Programmierer/Entwickler entscheidet sich – wie in folgendem PHP-Beispiel – oft für die zunächst einfachste und naheliegendste Lösung der Zusammensetzung 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 Variablen. 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 Datenbankabfragen nahezu beliebig manipulieren – der Angreifer kann so nahezu volle Kontrolle über die Datenbank erlangen.
Besteht (z.B. über eine solche SQL-Injection) erst einmal Kontrolle über an eine Website oder Webanwendung angeschlossene Datenbank, lässt sich allerhand Schindluder treiben – es können fast nach Belieben z.B. Benutzernamen, Passwörter, Inhalte von Seiten oder sonstige Daten ausgespäht, geändert oder gelöscht werden.
Grundsätzlich gilt die Devise:
Traue niemals Benutzereingaben!
Jede Eingabe eines Benutzers muss validiert/überprüft werden. Bei Datenbankabfragen haben sich darüber hinaus sogenannte „Prepared Statements“ bewährt:
Hier wird das SQL-Statement isoliert von den übergebenen Werten betrachtet – eine Manipulation der eigentlichen SQL-Abfrage durch eine Benutzereingabe ist so nicht mehr möglich.
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 Datenbankabfragen nahezu beliebig manipulieren – der Angreifer kann so nahezu volle Kontrolle über die Datenbank erlangen.
Besteht (z.B. über eine solche SQL-Injection) erst einmal Kontrolle über an eine Website oder Webanwendung angeschlossene Datenbank, lässt sich allerhand Schindluder treiben – es können fast nach Belieben z.B. Benutzernamen, 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 Datenbank 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 übersehenen Sicherheitslücke. Insbesondere die Anfälligkeit einer Website oder Webanwendung für SQL-Injections und daraus resultierendem Cross-Site-Scripting gehören allerdings 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 werden. Bei Datenbankabfragen haben sich darüber hinaus sogenannte „Prepared Statements“ bewährt:
Hier wird das SQL-Statement isoliert von den übergebenen Werten betrachtet – eine Manipulation der eigentlichen SQL-Abfrage durch eine Benutzereingabe ist so nicht mehr möglich.
Webdesign Bad Salzuflen | Webdesign / Webentwicklung Bielefeld | Webdesign Paderborn | Design / Werbung Bad Salzuflen | Webdesign Lippe
JavaScript (nicht zu verwechseln mit Java) ist eine Programmiersprache für Browser und ein integraler Bestandteil 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
Erfahren Sie mehr über JavaScript im Blog.
Weitere Informationen finden Sie im

Fenster schließen
Bei PHP (PHP Hypertext Preprocessor – ein sogenanntes
rekursives Akronym, bei dem der erste Buchstabe der Abkürzung wiederum die gesamte Abkürzung ergibt) handelt
es sich um eine serverseitige Skriptsprache. Ein in PHP
geschriebenes Programm läuft meist auf einem Webserver. Greift ein Benutzer mit seinem Browser auf den Server
zu, wird das PHP-Skript ausgeführt und gibt entsprechende Ausgaben zurück.
Dies ermöglicht dynamische Webseiten und Webanwendungen mit Datenbank-Anbindung wie z.B. Webshops oder Foren.
Weitere Informationen finden Sie im
Wikipedia-Artikel zu PHP (externer Link).
Fenster schließen
Dies ermöglicht dynamische Webseiten und Webanwendungen mit Datenbank-Anbindung wie z.B. Webshops oder Foren.
Weitere Informationen finden Sie im

Fenster schließen