AirMax: Sicherheit bei Formular erhöhen

Beitrag lesen

Hallo zusammen

Ich habe ein Formular gebastelt, in das der Nutzer seinen Benutzername und sein Passwort eintragen kann. Zur recht komplexen Validierung binde ich ein zusätzliches Skript ein. Neben profanen Validierungen wie zum Beispiel:

  
if (  
	empty($_POST['userid'])  
	&&  
	$_POST['check'] == 'true'  
   ) {  
	$errormessage = 'Bitte geben Sie Ihre Kundennummer und das dazugehörige Passwort ein.';  
     }

habe ich auch noch Bedingungen, die die Benutzereingaben mit einer Datenbank abgleichen:

  
if (  
	!empty($_POST['userid'])  
	&&  
        // $result ist das assoziative array aus der Datenbank!  
	$_POST['userid'] != $result[userid]  
   ) {  
	$errormessage = 'Die von Ihnen eingegebene Kundennummer ist ungültig. Bitte überpüfen Sie Ihre Eingabe.';  
     }

Das Thema SQL-Injection hat mich dazu gebracht, die Sicherheit innerhalb des Validierungsprozesses zu erhöhen. Dazu will ich einen regulären Ausdruck nutzen. Jetzt habe ich aber ein Problem: Ich weiss nicht, an welcher Stelle ich preg_match() benutzen soll. Etwa IMMER an jeder Stelle, wo ich die Benutzereingabe abrufe? Also in etwa so:

  
if (  
	!empty(preg_match('/[a-z0-9]{12}/i', $_POST['userid']))  
	&&  
	preg_match('/[a-z0-9]{12}/i', $_POST['userid']) != $result[userid]  
   ) {  
	$errormessage = 'Die von Ihnen eingegebene Kundennummer ist ungültig. Bitte überpüfen Sie Ihre Eingabe.';  
     }

Ich sollte vielleicht noch erwähnen, dass ich das Formular bei jeder Anfrage mit $_SERVER['PHP_SELF'] erneut aufrufe.

Macht das Sinn? Das kommt mir ein bisschen komisch vor! Was passiert denn z.B., wenn sich die Benutzereingabe mit dem Suchmuster nicht deckt? Irgendwie sind das mehrere Bedingungen ineinander verschachtelt. preg_match() ist in empty() verschachtelt. Kann mir jemand einen Tipp geben, wie ich mein Durcheinander auflösen kann?

Danke & Gruß
AirMax