MudGuard: Passwort Generator

Beitrag lesen

Hi,

$psw = array();
for($i = 0; $i < $anz; $i++){
	$pw = '';
  for($a = 0; $a < 10; $a++){
      $pw .= substr('./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjklmnopqrstuvwxyz0123456789!§$&=?@+*#', mt_rand(0, 73), 1);
  }
  while(in_array($pw, $psw)){
      $pw = '';
      for($b = 0; $b < 10; $b++){
          $pw .= substr('./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjklmnopqrstuvwxyz0123456789!§$&=?@+*#', mt_rand(0, 73), 1);
      }
  }
  $psw[] = $pw;
	
	$query = sprintf(
  	"INSERT INTO `codes` (`code`, `abt`, `funktion`)
    VALUES ('%s', '%s', '%s')",
    $mysqli->real_escape_string($pw),
    $mysqli->real_escape_string($row['preffix'] . $row['suffix']),
    $mysqli->real_escape_string('Besucher')
  );
  $mysqli->query($query);
}

Da ist ziemlich viel wiederholter Code drin, das solltest Du ändern.

Ich würde den String der erlaubten Zeichen als Variable oder Konstante festlegen, und dann nicht die hartcodierte Länge bei rand angeben, sondern dazu strlen auf die Konstante anwenden (und natürlich 1 abziehen, da bei 73 Zeichen diese Indizes von 0 bis 72 haben).

Wenn Du beim jetzigen Code ein neues Zeichen erlaubst oder ein bestehendes nicht mehr erlauben willst, mußt Du statt an einer Stelle an vier Stellen korrigieren.

Die 73 dürfte auch das Problem sein - da nur Positionen von 0 bis 72 vorhanden sind, gibt substr dann vermutlich einen Leerstring zurück (müßte man im Handbuch nachgucken).

Warum dürfen eigentlich nicht 2 User das selbe Paßwort besitzen? Gibt's dafür einen echten Grund?

Da $psw am Anfang als leeres Array initialisiert wird, ist nach dem ersten Paßwort-Erzeugen dieses niemals schon im Array, die while-Schleife wird also nie durchlaufen. Es findet also eh keine Duplikats-Prüfung statt - dazu müßte am Anfang $psw mit allen vorhandenen Paßwörtern gefüllt werden.

Und selbst dann wäre kein Duplikatsschutz gegeben, denn wenn zwei User das Paßwort-generieren zufällig gleichzeitig auslösen und zufällig auch das gleiche Paßwort bekommen, wäre es bei beiden noch nicht in $psw …

cu,
Andreas a/k/a MudGuard