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:
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);
}
?>
<head>
<title>SQL Injection-Demonstration</title>
<body>
<?php if (!$eingeloggt) { ?>
<?php } else { ?>
<p>Sie sind nun eingeloggt, Admin!</p>
<?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);
}
?>
<head>
<title>SQL Injection-Demonstration</title>
<body>
<?php if (!$eingeloggt) { ?>
<?php } else { ?>
<p>Sie sind nun eingeloggt, Admin!</p>
<?php } ?>