PHP: Usereingaben überprüfen

Samuel Frey

Neues Mitglied
Hallo

Bevor eine Formular-Eingabe eines Users in PHP weiterverwendet oder in die Datenbank speichert, muss ja überprüft werden, ob es sicher ist und keinen schädlichen Code enthält. Jetzt lese ich aber immer von verschiedenen Möglichkeiten, welches ist die beste und gängigste Methode?

In PHP 5 gibts ja die Variablen filter_input() und filter_var()? Oder auch mysql_real_escape_string() und htmlspecialchars()?

Danke für Tipps!
 
die beste Methode ist, für jede Eingabe einen genauen REGEX zu erstellen und alles nicht-konforme aus der Eingabe herauszulöschen.

Ein Paar Beispiele:
CODE function numbers_only($string)
{
return preg_replace("#[^0-9]#", "", $string);
}

function IsDate($input)
{
$input = preg_replace("#^\-[^0-9]#", "", $input);
$input = explode("-",$input);
$Year = $input[0];
$Month = $input[1];
$Day = $input[2];
return checkdate( $Month, $Day, $Year );
}

function MakeName($input)
{
$pattern = '/([[:digit:]]|[~`!@#$%^&*\(\)_=\+{}\|\\:;<>"\/?,]|\[|\]|-)+/';
return preg_replace($pattern,"", stripslashes($input));
}

function MakeTel($input)
{
$pattern = '#^\+^\(^\)[^0-9]#';
return preg_replace($pattern,"", stripslashes($input));
}

function MakeAddress($input)
{
$pattern = '/[~`!@#$%^&*\(\)_=\+{}\|\\:;<>"\/?,]|\[|\]/';
return preg_replace($pattern,"", stripslashes($input));
}

function MakeEmail($input)
{
$pattern = '/[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+/i';
return preg_replace($pattern,"", stripslashes($input));
}

function MakeText($input)
{
$pattern = '/[~`@#$%^&*_=\+{}\|\\<>"\/]|\[|\]/';
return preg_replace($pattern,"", stripslashes($input));
}


Mod Security auf dem Server bietet auch guten Schutz vor GPC Angriffen
 
htmlspecialchars()
z.B. Nutzen wenn du es auf der Webseite wieder ausgibst (Textfeld usw.)
Dadurch wird dann auch das ausführen von Javascript verhindert. Interessant zur Unterbindung von Session Hijacking.


filter_input()
Gibt entsprechend des Filter-Types, formatierte Werte zurück. Dass können Htmlentities oder URL-Encoded sein.
Dient für die Darstellung auf der Seite und Nutzung für Internetadressen.
Zur Validätsprüfung und Schutz nur bedingt zu empfehlen. Für Korrekte Werte innerhalb des HTMLs und Adressleiste jedoch empfehlenswert.


filter_var()
ist die einfache Form von Validitätsprüfungen.
So kannst du z.B. die Korrektheit einer Emailadresse, Internetadresse o.ä. Prüfen.
Lass mich nicht lügen, das gibt es erst seit PHP 5. Was du vorher z.B. mit preg_match prüfen musstest,
kann jetzt einfach hiermit geprüft werden ohne dass du dich mit regulären Ausdrücken beschäftigen und rumärgern musst.


mysql_real_escape_string()
Maskiert und escapet spezielle Zeichen eines Strings für die Verwendung in einem SQL-Stement.
So können z.B. SQL-Injecktions unterbunden bzw. weitestgehend minimiert werden.



Grundsätzlich gilt, je nachdem was du vor hast, hast du auch entsprechend zu prüfen. Das kann man leider nicht pauschalisieren.
Je detaillierter du prüfst, desto sicherer.

Ich habe versucht das so einfach wie möglich zu erklären, hoffe dir helfen zu können.

LG
 
Zurück
Oben