02.01.2010, 10:20

Hans-Christian Dirscherl

Ratgeber Website-Sicherheit

SQL-Injection: Die Datenbank im Visier der Hacker

Die zweite Bedrohung richtet sich direkt gegen Datenbanken. Per SQL-Injection kann der böswillige Nutzer Daten auslesen oder sich in geschützte Bereiche einschmuggeln. Das Konzept ist recht einfach: Ein einfaches Anführungszeichen durchbricht die SQL-Abfrage.

Zuerst einmal zeigen wir Ihnen ein Skript, das die entsprechende Lücke enthält:
<?php
$eingeloggt = false;
if (isset($_POST["name"]) && isset($_POST["passwort"])) {
$verb = mysql_connect("localhost", "root", "") or die("Verbindung gescheitert");
mysql_select_db("sqlinjection") or die("Datenbankauswahl gescheitert");
$abfrage = "SELECT * FROM nutzer WHERE nutzername = '" . $_POST["name"] . "' AND
passwort = '" . $_POST["passwort"] . "'";
$ergebnis = mysql_query($abfrage, $verb) or die("Abfrage gescheitert");
if (mysql_num_rows($ergebnis) > 0) {
$eingeloggt = true;
}
mysql_free_result($ergebnis);
mysql_close($verb);
}
?>
transitional.dtd">

<head>
<title>SQL Injection-Demonstration</title>


<body>
<?php if (!$eingeloggt) { ?>

Nutzername


Passwort


value="Anmelden" />

<?php } else { ?>
<p>Sie sind nun eingeloggt, Admin!</p>
<?php } ?>

In diesem Beispiel wird die Abfrage einfach aus den Parametern des Formulars zusammengesetzt. Die sind aber völlig ungefiltert. Ein böswilliger Nutzer kann nun also versuchen, eigenen SQL-Code einzuschleusen.
Hier ein möglicher Angriff: ' OR 1=1 /*

Entscheidend ist der erste Apostroph, der die Werteingabe in der SQL-Abfrage unterbricht. Danach kommt ein SQL-Befehl. Er besteht in diesem Fall aus einer Bedingung, die immer wahr ergibt. Das Ganze wird mit einem Kommentarzeichen für das Ende der SQL-Anweisung abgeschlossen. Wenn Sie diesen Code in das Feld für den Nutzernamen eingeben, landen Sie direkt im geschützten Bereich.
Vorsicht, dieser Einbruch klappt nur, wenn in PHP magic_quotes_gpc ausgeschaltet sind. Die Konfigurationseinstellung entwertet den gefährlichen Apostroph automatisch mit einem Backslash. Der Nachteil daran ist, dass nicht alle Datenbanken mit einem entwertenden Backslash zu Rande kommen. MySQL hat zwar mit magic_quotes_gpc keine Probleme, aber auch hier ergeben sich potenziell Lücken (http://shiflett.org/archive/184).
Gegenmaßnahmen

Es gibt mehrere Gegenmaßnahmen, die sich alle um die Filterung der Apostrophen und bedrohlichen Zeichen richten:
* Wie bereits erwähnt, ist es in PHP eine mögliche Gegenmaßnahme, magic_quotes_gpc auf On zu schalten. Der Nachteil ist allerdings, dass dies zwar mit MySQL, nicht aber mit allen Datenbanken funktioniert. Und selbst mit MySQL ist es wie erwähnt kein hundertprozentiger Schutz. Ganz abgesehen davon verliert der Entwickler mit den magischen Anführungszeichen auch Kontrolle.

* Einige Datenbanken bieten eigene Funktionen, um die Strings zu escapen, z.B. für MySQL mysql_escape_string() und für SQLite sqlite_escape_string(). * Datenbankabstraktionsklassen wie PEAR::DB bieten Escape-Funktionen. Sie können natürlich auch eine eigene schreiben.
* Sie verwenden parametrisierte Abfragen, um die Werte an die Datenbank zu übergeben. Dies ist in allen serverseitigen Technologien ein gutes Mittel, da die Parameter immer nur einen bestimmten Datentyp haben. Dabei kümmert sich das Datenbankmodul intern um das Escapen. Dies können die meisten Datenbankmodule. Mit diesen Mitteln lässt sich SQL-Injection durchaus in den Griff bekommen. Denn schließlich müssen Sie ja "nur" verhindern, dass ein einfacher Apostroph Katastrophen auslöst.
Lesen Sie auf der nächsten Seite:
Diskutieren Sie mit anderen Lesern über dieses Thema:
PC-WELT-Experten lösen Ihr PC-Problem
Immer informiert mit dem PC-WELT Newsletter
Best-of PC-WELT   PC-WELT Apps
PC-WELT Business-IT   PC-WELT Community
Facebook-Freunde empfehlen
3x PC-WELT testen!
Ja, ich teste 3x die PC-WELT mit DVD für nur 11,90 € (19,- Sfr). Den 4 GB USB-Stick erhalte ich gratis dazu.
PC-WELT 6/ 2012
Anrede:
Vorname:
Nachname:
Straße/Nr:
PLZ/Ort:
Land:
E-Mail:
Nur wenn ich innerhalb von 2 Wochen nach Erhalt der 3. Ausgabe nichts von mir hören lasse, möchte ich die PC-WELT mit DVD zum gleichen Preis weiterbeziehen (D: 55,80 €/Jahr, EU: 64,80 €/Jahr, CH: 103,70 Sfr/Jahr). Nach dem Testzeitraum ist der Bezug jederzeit kündbar.
Ich bin damit einverstanden, dass die IDG Tech Media GmbH und ihre Partner mich per E-Mail über interessante Vorteilsangebote informieren.
- Anzeige -
Angebote für PC-WELT-Leser

PC-WELT Verleihshop
Keine Abogebühren oder unnötige Vertragsbindungen. DVDs und Spiele bequem von zu Hause aus leihen.

Tarifrechner
Der PC-WELT Preisvergleich für Strom, Gas und DSL. Hier können Sie Tarife vergleichen und bequem viel Geld sparen.

PC-WELT Preisvergleich
In unserem großen Preisvergleich finden Sie die günstigsten Preise und alle redaktionellen Tests auf einen Blick.

- Anzeige -
Marktplatz
DELL

Dell Vostro 3550 Business Notebook
Komfort eines erweiterten Arbeitsbereichs, ohne mobile Anforderungen zu beeinträchtigen.

Congstar

congstar Full Flat nur noch 39,99€
Endlos in alle dt. Netze telefonieren, beste D-Netz-Qualität.

Congstar

Der günstige Tarif für Vielsurfer
congstar Smart 100. Surfen und telefonieren im besten D-Netz.

CosmosDirekt

CosmosDirekt Riesterrente
Mit der Riester-Rente privat mit hohen staatlichen Zulagen fürs Alter vorsorgen.

237461
Content Management by InterRed