SQL Injection
Author: Admin (235 Wörter in diesem Text) (10043 mal gelesen)
Bei einer SQL-Imjection handelt es sich um eine SQL-Anweisung die von Hackern in Usereingaben
eingeschleust werden um die Datenbank zu manipulieren.
PHP-Entwickler befinden sich bei vielen dieser Versuche auf der sicheren Seite, aufgrund der Tatsache das MySQL in einem
mysql_query immer nur ein Update, Insert oder Select pro Aufruf zuläßt und diese Befehle nicht in Kombination benützt werden
können.
Sehen wir uns aber mal an was alles möglich wäre:
PHP-CODE:
<?PHP
$sql = "SELECT * FROM users
WHERE username='" . $_POST['username'] . "'
AND password='" . $_POST['password'] . "'";
echo 'Query: ' . $sql . '<br />';
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
if ($rows > 0) {
echo 'You are logged in!<br />';
} else {
echo 'You are not allowed here!<br />';
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="username" /><br />
<input type="text" name="password" /><br />
<input type="submit" />
</form>
Ein Angreifer könnte nun im Passwort-Feld folgendes eingeben:
' OR username LIKE '%
Angenommen magic quotes ist auf dem Server ausgeschaltet, so würde folgendes in Ihrer SQL-Anweisung entstehen:
SELECT * FROM users
WHERE username='' AND password='' OR username LIKE '%'
Dieser Modifizierte Query würde alle Einträge der User Tabelle auswählen!
Diesem können wir vorbeugen indem wir alle ankommenden Variablen Escapen:
PHP-CODE:
<?php
function safeEscapeString($string)
{
if (get_magic_quotes_gpc()) {
return $string;
} else {
return mysql_real_escape_string($string);
}
}
$sql = "SELECT * FROM users
WHERE username='" . safeEscapeString($_POST['username']) . "'
AND password='" . safeEscapeString($_POST['password']) . "'";
?>
Wie immer gilt also, traue keiner Usereingabe...
Zurück
|