Moin,
ich habe mal wieder ein kleines Problem:
Ich habe mit Ajax und PHP ein Tool zur überprüfung der Passwortsicherheit geschrieben.
Mein Problem ist das umlaute bzw. Sonderzeichen nicht richtig erkannt werde.
ich lasse in Ajax alles mit dem befehl "escape()" umwandeln und übergebe es per Post.
alle zu überprüfenden Zeichen sind in der PHP Datei ein einem array. z.b. array('a','b','c')
jedoch wenn da ein array(' ') ist erkennt der ein "+" und nicht den leerschritt wenn ich in den array einen '\+' packe erkennt der das gar nicht. und ein '+' dann ist jedes Zeichen für ihn ein Sonderzeichen... Naja schaut euch das Script selber mal an.
Besten Dank schonmal
zum Testen: http://michelhp.de/pw/pw.html
pw.js
pw.php (bei $sonderzeichen und $umlaute ist das Problem: ich habe ein ' ' drin und er ekennt ein +)
ich habe mal wieder ein kleines Problem:
Ich habe mit Ajax und PHP ein Tool zur überprüfung der Passwortsicherheit geschrieben.
Mein Problem ist das umlaute bzw. Sonderzeichen nicht richtig erkannt werde.
ich lasse in Ajax alles mit dem befehl "escape()" umwandeln und übergebe es per Post.
alle zu überprüfenden Zeichen sind in der PHP Datei ein einem array. z.b. array('a','b','c')
jedoch wenn da ein array(' ') ist erkennt der ein "+" und nicht den leerschritt wenn ich in den array einen '\+' packe erkennt der das gar nicht. und ein '+' dann ist jedes Zeichen für ihn ein Sonderzeichen... Naja schaut euch das Script selber mal an.
Besten Dank schonmal
zum Testen: http://michelhp.de/pw/pw.html
pw.js
PHP:
var resobjekt;
if(navigator.appName.search("Microsoft") > -1){
resobjekt = new ActiveXObject("MSXML2.XMLHTTP");
}else{
resobjekt = new XMLHttpRequest();
}
function sndReq() {
resobjekt.open('post', 'pw.php' , true);
resobjekt.onreadystatechange=handleResponse;
resobjekt.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
resobjekt.send('daspw=' + escape(this.document.f.mypw.value));
}
function handleResponse(){
if(resobjekt.readyState == 4){
document.getElementById("ant").innerHTML = resobjekt.responseText;
}
}
pw.php (bei $sonderzeichen und $umlaute ist das Problem: ich habe ein ' ' drin und er ekennt ein +)
PHP:
<?php
//****************Einstellungen
$standartpunkte=10; //Punktzahl für alles außer Passwortlänge
$pwlaenge=8; //Die Länge des Passworts
$p_max=$standartpunkte*5+$pwlaenge; //Gesamtpunktzahl wird errechnet
//****************Funktionen
function io($id,$meld_ja="Ja",$meld_nein="Nein"){
if($id==1){
return $meld_ja;
}else{
return $meld_nein;
}
}
$pw=$_REQUEST['daspw']; //Passwort wird aus AJAX übermittlung gelesen
$laenge=strlen($pw); //Passwortlänge wird bestimmt
$pwarray=str_split($pw); //Passwort wird in einen Array gelegt
if($laenge>=$pwlaenge){$laenge1=1;}else{$laenge1=0;} //Erste Prüfung. Ist das Passwort länger als angegeben.
//****************Kleinbuchstaben als Array zur überprüfung
$buchstaben_klein=array('a','b','c','d','e',
'f','g','h','i','j',
'k','l','m','n','o',
'p','q','r','s','t',
'u','v','w','x','y',
'z'
);
//****************Großbuchstaben als Array zur überprüfung
$buchstaben_gross=array('A','B','C','D','E',
'F','G','H','I','J',
'K','L','M','N','O',
'P','Q','R','S','T',
'U','V','W','X','Y',
'Z'
);
//****************Zahlen als Array zur überprüfung
$zahlen=array('0','1','2','3','4',
'5','6','7','8','9'
);
//****************Umlaute und Leerzeichen als Array zur überprüfung
$umlaute=array('ä','ö','ü','Ä','Ö','Ü');
//****************Die beliebtesten Sonderzeichen als Array zur überprüfung
$sonderzeichen=array(',' ,';' ,':' ,',' ,'-',
'_' ,'=' ,'\'','\/','\]',
'\?','\^','&' ,'!' ,'\.' ,
'@' ,'\$','£' ,'#' ,'\*' ,
'\(','\)','\.' ,'%' ,'~' ,
'<' ,'>' ,'\{' ,'\}' ,'\[',' '
);
//****************Buchstaben-/Zahlenfolgen 3er Sätze als Array zur überprüfung
$folgezeichen=array('abc','bcd','cdf','def','efg',
'fgh','ghi','hij','ijk','jkl',
'klm','lmn','mno','nop','opq',
'pqr','qrs','rst','stu','tuv',
'uvw','vwx','wxy','xyz',
'123','234','345','456','567',
'678','789'
);
//****************Buchstabenfolgen der Tastatur 3er Sätze als Array zur überprüfung
$folgezeichen_tasta=array('qwe','wer','ert','rtz','tzu',
'zui','uio','iop','opü','asd',
'sdf','dfg','fgh','ghj','hjk',
'jkl','klö','löä','yxc','xcv',
'cvb','vbn','bnm','qay','wsx',
'edc','rfv','tgb','zhn','ujm'
);
//****************Überprüfen ob kleinbuchstaben vorhanden sind
foreach($buchstaben_klein as $buchstaben_klein1){
$bkv=ereg($buchstaben_klein1,$pw);
if($bkv>0){break;}
}
//****************Überprüfen ob großbuchstaben vorhanden sind
foreach($buchstaben_gross as $buchstaben_gross1){
$bgv=ereg($buchstaben_gross1,$pw);
if($bgv>0){break;}
}
//****************Überprüfen ob Zahlen vorhanden sind
foreach($zahlen as $zahlen1){
$zv=ereg($zahlen1,$pw);
if($zv>0){break;}
}
//****************Überprüfen ob Umlaute vorhanden sind
foreach($umlaute as $umlaute1){
$ulv=ereg($umlaute1,$pw);
if($ulv>0){break;}
}
//****************Überprüfen ob Sonderzeichen vorhanden sind
foreach($sonderzeichen as $sonderzeichen1){
$szv=ereg($sonderzeichen1,$pw);
if($szv>0){break;}
}
//****************Überprüfen ob Zeichen 3mal hintereinander vorhanden sind.
for($i=0;$i<=$laenge;$i++){
if($pwarray[$i]==$pwarray[$i+1] && $pwarray[$i]==$pwarray[$i+2] && (!empty($pwarray[$i]) || !empty($pwarray[$i1]) || !empty($pwarray[$i2]))){
$zeichenfolge=0;break;
}else{
$zeichenfolge=1;
}
}
//****************Überprüfen ob Buchstaben-/Zahlenfolgen vorhanden sind
foreach($folgezeichen as $folgezeichen1){
$fzv=eregi($folgezeichen1,$pw);
if($fzv>0){break;}
}
//****************Überprüfen ob Buchstaben-/Zahlenfolgen der Tastatur vorhanden sind
foreach($folgezeichen_tasta as $folgezeichen_tasta1){
$fztv=eregi($folgezeichen_tasta1,$pw);
if($fztv>0){break;}
}
if($laenge>$pwlaenge){ //-->
$p_pwlaenge=$pwlaenge;}else{$p_pwlaenge=$laenge;} //Wenn die Länge des Passworts $pwlaenge übersteigt, gibt es trozdem nur die Punkte der $pwlaenge
$p_bkv=io($bkv,$standartpunkte,0); //-->
$p_bgv=io($bgv,$standartpunkte,0); //-->
$p_zv=io($zv,$standartpunkte,0); //-->
$p_szv=io($szv,$standartpunkte,0); //-->
$p_ulv=io($ulv,$standartpunkte,0); //Punkte festlegen anhand der oberen Anweisungen
$p_zeichenfolge=io($zeichenfolge,0,-$standartpunkte);//-->
$p_fzv=io($fzv,-$standartpunkte,0); //-->
$p_fztv=io($fztv,-$standartpunkte,0); //Punkte festlegen anhand der oberen Anweisungen (diese 3 im Minusbereich)
//****************Errechnen wieveiel Punkte erreicht wurden
$erreicht=$p_pwlaenge+$p_bkv+$p_bgv+$p_zv+$p_szv+$p_ulv+$p_zeichenfolge+$p_fzv+$p_fztv;
//****************Ausgabe der Ergebnisse
echo"
<table border='1' cellpadding='0' cellspacing='0'>
<tr>
<td bgcolor='#999999'><b>Beschreibung</b></td>
<td bgcolor='#999999'><b>Status</b></td>
<td bgcolor='#999999'><b>Moegliche Punkte</b></td>
<td bgcolor='#999999'><b>Punkte erreicht</b></td>
</tr>
<tr>
<td>Passwort laenger als ".$pwlaenge." Zeichen</td>
<td>".io($laenge1)."</td>
<td>8 (1 pro Zeichen)</td>
<td>".$p_pwlaenge."</td>
</tr>
<tr>
<td>Kleine Buchstaben vorhanden</td>
<td>".io($bkv)."</td>
<td>$standartpunkte</td>
<td>".$p_bkv."</td>
</tr>
<tr>
<td>Grosse Buchstaben vorhanden</td>
<td>".io($bgv)."</td>
<td>$standartpunkte</td>
<td>".$p_bgv."</td>
</tr>
<tr>
<td>Zahlen vorhanden</td>
<td>".io($zv)."</td>
<td>$standartpunkte</td>
<td>".$p_zv."</td>
</tr>
<tr>
<td>Sonderzeichen vorhanden</td>
<td>".io($szv)."</td>
<td>$standartpunkte</td>
<td>".$p_szv."</td>
</tr>
<tr>
<td>Umlaute vorhanden</td>
<td>".io($ulv)."</td>
<td>$standartpunkte</td>
<td>".$p_ulv."</td>
</tr>
<tr>
<td>kein Zeichen mehrfach hintereinander</td>
<td>".io($zeichenfolge)."</td>
<td>-$standartpunkte</td>
<td>".$p_zeichenfolge."</td>
</tr>
<tr>
<td>Keine Zeichenfolgen wie \"abc\" oder \"123\"</td>
<td>".io($fzv,"Nein","Ja")."</td>
<td>-$standartpunkte</td>
<td>".$p_fzv."</td>
</tr>
<tr>
<td>Keine Tastaturzeichenfolgen wie \"qwe\" oder \"qay\"</td>
<td>".io($fztv,"Nein","Ja")."</td>
<td>-$standartpunkte</td>
<td>".$p_fztv."</td>
</tr>
<tr>
<td colspan=2><b>Gesamtpunkte:</b></td>
<td><b>".$p_max."</b></td>
<td><b>".$erreicht."</b></td>
</tr>
</table>
";
//****************Prozente berechnen und Grafik ausgeben
$prozent = $erreicht*100/$p_max;
echo"
Sicherheitsfaktor: ".number_format($prozent,'2',',','.')."%
<table width='100' cellpadding='0' cellspacing='0'>
<tr>
<td height='30' width='100' background='verlauf.gif'>
";
for($i=1;$i<floor($prozent);$i++){
echo"<img src='blank.gif' title='Sicherheitsfaktor: ".number_format($prozent,'2',',','.')."%'>";
}
echo"<img src='black.gif' title='Sicherheitsfaktor: ".number_format($prozent,'2',',','.')."%'>";
echo"
</td>
</tr>
</table>
";
?>
Zuletzt bearbeitet: