Über die Sicherheit der Daten innerhalb einer Webanwendung sollte man sich stets Gedanken machen. übergibt man POST-Variablen ungeprüft der Anwendung kann die Sicherheit bereits gefährdet sein.
Angreifer können unter Umständen mittels SQL-Injektion Anfragen verändern oder neue erstellen.
Meine Schutzmaßnahme in einer PHP-Anwendung mit MySQL besteht in einer kleinen Hilfsfunktion, die alle Variablen, die in einer Anwendung verarbeitet werden für den SQL-Syntax valide terminiert:
// sanitize strings for db queries
function sanitize_sql($value) {
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
return mysql_real_escape_string($value);
}
In jeder Datenbankanfrage, der Variablen übergeben werden, bereinigt diese Funktion eventuellen Schadcode mittels Terminierung:
// get userID
function check_user($username, $userpass) {
$sql="SELECT userid
FROM mars_users
WHERE username='".$this->sanitize_sql($username)."' AND
userpass='".$this->sanitize_sql(md5($userpass))."' LIMIT 1";
$result=mysql_query($sql) or $this->errorLog($this->page, mysql_error());
if (mysql_num_rows($result)==1):
$resultarray=mysql_fetch_assoc($result);
return $resultarray['userid'];
else:
return false;
endif;
}
In PHP selbst kann man auch Variablen mittels Regular Expressions prüfen. Eine einfache Funktion zur Überprüfung eines Strings könnte so aussehen:
// sanitize string
function sanitize_string($value) {
$value=preg_replace("/[^\w\040\-_.!?]/","",$value);
$value=trim($value);
return $value;
}
Dazu bietet sich noch die Validierung von Formulareingaben mittels JavaScript an, wie im Beitrag vorher erwähnt.
Responses to “PHP: SQL-Injection”