Was eine
SQL-Injection alles anrichten kann, habt ihr sicherlich schon bemerkt. Diese Angriffe basieren hauptsächlich auf eurem Code, der gerade bei Anfängern viele Sicherheitslücken aufweist. Diese Lücken können ausgenutzt werden um Daten aus eurer Datenbank auszulesen und im schlimmsten Falle um Schaden anzurichten.
Es gibt allerdings einige Methoden um SQL-Injections zu vermeiden, die ich euch in diesem Tutorial etwas näher bringen möchte.
Die Problemstellen sind die, wo eure Datenbank abgefragt wird oder wo ihr etwas in diese eintragt. Diese Stelle gilt es vor Fremdeingriffen zu schützen. Am besten zeige ich euch aber mal an einem Beispiel, was ich meine.
Nehmen wir also mal an, wir haben ein Formular in das die Besucher Name und Email-Adresse eintragen (z.B. bei einer Registrierung). Später soll dann dieses Formular verabeitet werden und die angegebenen Daten sollen in unsere Datenbank eingetragen werden. An dieser Stelle gilt es nun aufzupassen!
<?php
$eintrag = "INSERT INTO mitglieder (name, email) VALUES
('".$_POST['name']."','".$_POST['email']."')";
$eintragen = mysql_query($eintrag);
?>
Wie ihr seht werden die Felder "name" und "email" aus dem Formular direkt und ungeschützt in die Datenbank eingetragen. Dort ist es möglich über das Formular eine SQL-Injection zu machen. Um dies zu verhindern greifen wir nun auf die Funktion
addslashes() zurück:
<?php
$eintrag = "INSERT INTO mitglieder (name, email) VALUES
('".addslashes($_POST['name'])."','".addslashes($_POST['email'])."')";
$eintragen = mysql_query($eintrag);
?>
Durch die Escape-Funktion
addslashes() werden Zeichen wie ' oder ", die wichtig für die SQL-Injection sind, escaped. Aus ' wird also \' und aus " wird \". Statt
addslashes() können auch andere Escape-Funktionen wie
mysql_real_escape_string() ,
sql_escape_string() ,
addcslashes() usw. genutzt werden. Wichtig ist aber erstmal, dass unsere Datenbank nun vor Fremdeingriffen sicher ist.
Jeder der also Skripte verwendet, die mit Datenbanken arbeiten, sollte seinen Code nun nach Sicherheitslücken
durchsehen und ihn, wie hier beschrieben, schützen.
(Eine Überarbeitung von Delite's Login-Skript folgt bald.)
madi
Wow! Danke!! Das ist echt ein wichtiges Thema und du hast alles super erklärt.6 Sterne!