1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use strict;
use CGI;
...
# Fehlertext leer setzen
my $Fehlertext = '';
# neues (spaeteres) Passwort einlesen
my $Neupw1 = $cgi->param($Feldnamen[2]);
...
# nimm aus $Neupw1 beginnend bei Position 0 die ersten 8 Zeichen als $Neupw1kurz
my $Neupw1kurz = substr($Neupw1,0,8);
# $SortedNeupw1kurz ergibt sich aus dem umsortierten $Neupw1kurz (gleiche Buchstaben stehen hintereinander)
my $SortedNeupw1kurz = join('',sort(split(//,$Neupw1kurz)));
# jetzt der eigentliche Test
if(( $Neupw1kurz !~ /^(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z].*[a-zA-Z])(?=.*[^a-zA-Z])\S{7,8}$/) || $SortedNeupw1kurz =~ /(.)\1{3,}/)
{ $Fehlertext .= 'Das neue Passwort entspricht nicht den Sicherheitsrichtlinien!'; }
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# nimm aus $Neupw1 beginnend bei Position 0 die ersten 8 Zeichen als $Neupw1kurz
my $Neupw1kurz = substr($Neupw1,0,8);
# $SortedNeupw1kurz ergibt sich aus dem umsortierten $Neupw1kurz (gleiche Buchstaben stehen hintereinander)
my $SortedNeupw1kurz = join('',sort(split(//,$Neupw1kurz)));
# kuerzer als 7 Zeichen?
if ( length($Neupw1) < 7)
{ $Fehlertext .= 'Passwort ist zu kurz'; }
# laenger als 20 Zeichen?
if ( length($Neupw1) > 20)
{ $Fehlertext .= 'Passwort ist zu lang'; }
# erstes Zeichen ein Buchstabe oder eine Ziffer?
if( $Neupw1kurz !~ /^(?=[a-zA-Z0-9].*$/) )
{ $Fehlertext .= 'erstes Zeichen ist weder Buchstabe noch Ziffer'; }
# innerhalb der ersten 8 Zeichen darf kein Zeichen öfter als dreimal vorkommen
if($SortedNeupw1kurz =~ /(.)\1{3,}/)
{ $Fehlertext .= 'ein Zeichen tritt öfter als dreimal auf'; }
# enthaelt nur zulaessige Zeichen?
if( $Neupw1kurz !~ /^(?=[a-zA-Z0-9~!@#%_+-{}[]:,.?/*]*$/) )
{ $Fehlertext .= 'enthält unzulässige Zeichen'; }
# sind innerhalb der ersten 8 (nun zulaessigen) Zeichen mindestens 4 Buchstaben enthalten?
if( $Neupw1kurz !~ /^(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z].*[a-zA-Z].*$/) )
{ $Fehlertext .= 'es müssen mindestens 4 Buchstaben enthalten sein'; }
# innerhalb der ersten 8 Zeichen mindestens eine Ziffer oder ein oben genanntes Sonderzeichen enthalten?
if($Neupw1kurz !~ /^(?=.*[0-9~!@#%_+-{}[]:,.?/*].*$/) )
{ $Fehlertext .= 'es ist weder Ziffer noch Sonderzeichen enthalten'; }
if (length($Fehlertext))
{ ### String entspricht nicht den Bedingungen, Fehlerausschrift präsentieren, usw. ### }