Anzeige
Tutorialbeschreibung

Passwortvalidierung durch reguläre Ausdrücke - php, reguläre Ausdrücke

Passwortvalidierung durch reguläre Ausdrücke - php, reguläre Ausdrücke

Kurzes Tutorial, in dem ein Script geschrieben wird, das man einsetzen kann, um eine Zeichenkette auf die Häufigkeit und das Vorkommen bestimmter Zeichen zu prüfen.


Ein Geburtsdatum oder den Namen eines Freundes kann man sich zwar leicht merken; aber als Passwort stellen sie keine wirkliche Hürde da und gefährden dadurch evtl. Teile des darunter liegenden Systems und die darauf gespeicherten Daten.
Trotzdem benutzen die meisten Menschen aus Bequemlichkeit eben solche Passwörter, die man sich leicht merken kann.
Also liegt es am Administrator, dafür zu sorgen, dass solche Passwörter nicht gewählt werden können.
Im Folgenden stelle ich eine Methode vor, wie man Zeichenketten leicht unter Zuhilfenahme von regulären Ausdrücken auf bestimmte Regeln prüfen kann.


Schritt 1:
Als Beispiel dient uns ein Passwort, das folgende Bedingungen erfüllen soll: Es muss
1. mindestens 8 Zeichen,
2. 2 Ziffern und
3. je einen Groß- und einen Kleinbuchstaben enthalten. Außerdem dürfen
4. nur &,! und # darin vorkommen.

Gleich zu Beginn des Skriptes wird die Zeichenkette auf ihre Länge überprüft und das Skript, falls sie zu kurz sein sollte, durch 

return false;

abgebrochen.

 

if(strlen($password)<8)return false;

Schritt 2:
Als Nächstes überprüfen wir die Zeichenkette auf eventuelle verbotene Zeichen, indem wir einen regulären Ausdruck definieren, in dem geprüft wird, ob das Zeichen keins von den erlaubten (&, !, #, a-z, A-Z, 0-9) ist und erhalten somit den Ausdruck:

$regexp = '/[^!|&|#|a-zA-Z0-9]/'

(das ^ verneint den Ausdruck).

Ergibt diese Abfrage über preg_match - true, so bedeutet das, dass nicht erlaubte Zeichen vorhanden sind, und das Script wird wieder über

return false;
abgebrochen.

$i = preg_match('/[^!|&|#|a-zA-Z0-9]/',$password);
if($i == 1)return false;

Schritt 3:
Als letzter Schritt wird nun nacheinander über die Funktion 

preg_match_all

geprüft,

wie oft bestimmte Zeichen in der Zeichenkette vorkommen
und ob es der geforderten Anzahl entspricht.
preg_match_all erfordert noch einen dritten Parameter, den wir hier jedoch nicht brauchen.
Deshalb übergeben wir einfach ein leeres Array.
Falls das Script bis zum Schluss nicht abgebrochen wurde, wird true zurückgegeben und das Script beendet.

$empty=array();
$i=preg_match_all('/[0-9]/',$password,$empty);
if($i<2)return false;
	
$i=preg_match_all('/[a-z]/',$password,$empty);
if($i == 0)return false;
	
$i=preg_match_all('/[A-Z]/',$password,$empty);
if($i == 0)return false;

return true;


Das gesamte Script steht auch zum Download bereit. Einfach in eine Funktion oder ein Script integrieren und
evtl. noch die Vorgaben an die eigene Bedürfnisse anpassen.


DVD-Werbung
Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von nellynelly
  • 27.02.2010 - 23:25

klingt nicht ganz uninteressant! danke

Portrait von websmurf
  • 11.02.2010 - 09:28

Schließlich mich dem Club der Ausbaugfähigen an.

Portrait von Bl00dyT1G3R
  • 11.02.2010 - 08:55

Wenn auch recht einfach, so bietet die Anleitung doch eine gewisse Basis. Das vermittelte Wissen lässt sich auch auf andere Dinge anwenden. So kann man nicht nur Passwörter prüfen sondern alle Strings, die über POST/GET übermittelt werden.

Außerdem bietet sich Interessenten hier die Möglichkeit, Reguläre Ausdrücke in der Praxis zu sehen und zu verstehen.

Eventuell könnte man noch hinzufügen, dass das Slash "/" am Anfang und Ende der Delimiter ist und die Pipe "|" für ODER steht.

Alles in Allem 4 Sterne durch das generelle Wissen das vermittelt wurde und durch die Kleinigkeit mit dem ^ innerhalb der [], denn nach dieser Lösung hatte ich gesucht (kannte das ^ bisher nur direkt nach dem / wo es für den Anfang der Zeile steht (wie $ für das Ende)).

Portrait von Jensomat
  • 10.02.2010 - 16:52

Interessant aber wie schon gesagt ausbaufähig

Portrait von mfgleo
  • 09.02.2010 - 07:11

Um eine gewisse Passwortkomplexität festzulegen nicht schlecht, aber mit Sicherheit noch ausbaufähig.

Portrait von m_c

m_c

  • 09.02.2010 - 00:27

Passwörter sollten eigentlich nie im Klartext abgespeichert werden. Ein SHA1 oder besser mit Saltbindung ist da wesentlich besser.

Portrait von steaff90
  • 09.02.2010 - 14:12

Das tutorial soll auch nur dazu dienen, das passwort auf gültigkeit zu prüfen nachdem es eingegeben und befor es weiterverarbeitet wird bei der registrierung sozusagen. Wie die passwörter später gespeichert werden (ich beforzuge die speicherung als md5 verschlüsselten string) bleibt jedem selbst überlassen

Portrait von Bl00dyT1G3R
  • 11.02.2010 - 08:57

Das Passwort wird aber im Klartext per POST an den Server übermittelt, somit kann man es erst so testen bevor man es dann verschlüsselt und in z.B. eine Datenbank abspeichert.

Portrait von taffrot
  • 08.02.2010 - 15:22

klasse sache, danke :)

x
×
×