Christian: rand: automatische Passwortvergabe

Für die Vergabe von Passwörtern soll dieses kleine Script dienen:

##############
#!/usr/bin/perl

sub zufall {
  my $laenge = shift;
  my @zeichen = qw(A B C D E F G H I J K M N o p q r s t u v w x y z a b c d e f g h j k l m n P Q R S T U V W X Y Z 0 2 3 4 5 6 7 8 9);
  my $erg = 'URA-';
  for (1..$laenge) {
    $erg .= $zeichen[int(rand $#zeichen)];
  }
  return $erg;
}

$password = zufall(7);

print "Content-Type: text/html\n\n" ;
print "<html><head><title>P A S S W O R T</title></head><body>\n";
print "Passwort: $password"\n;
print "</body></html>

##############

Mein Problem: Bei meiner privaten Site (bei puretec) läufts bestens, bei der Site die ich beruflich betreue (bei PSI-Net) wird das Passwort nur einmal ermittelt und dann nie wieder geändert. Das macht bei Passwörtern aber wenig Sinn.

Eine Varänderung des Ganzen konnte ich nur bei 'srand' feststellen, etwa so:

srand();                       # srand(time);
for($i = 0;$i < 5;$i++) {
   print .rand(150)."<br>\n"
}

Habe ich was falsch gemacht, was sollte ich am Script ändern.

Danke, Christian

  1. Hallo,

    Habe ich was falsch gemacht, was sollte ich am Script ändern.

    versuche es mit dem Modul 'String::Random'. Ich habe mal damit herimgespielt umd Seriennummern zu generieren.
    Da ich solchen Dingen etwas mißtrauisch gegenüberstehe, habe ich auch noch eine Prüfung eingeführt, ob nich doch doppelte Einträge entsehen können.
    Also bis jetzt ist noch nie ein doppelter Eintrag enstanden (test bis zu 4 Mio Strings).

    Und wenn Du das Modul nicht installieren kannst, so kannst Du es sicherlich in Deinem Script nachbilden.

    Grüße
      Klaus

  2. Hallo Christian,

    ich vermute, dass sich der Seed nicht ändert. Sonst würdest du nicht dasselbe Passwort bekommen.
    Perl verwendet standardmäßig eine Kombination aus der aktuellen Zeit, der Prozeß-ID und weiteren Zufallskomponenten als Argument zu srand()
    Einen "wirklich zufälligen" Seed erzeugst du folgendermaßen:

    use Math::TrulyRandom;   #CPAN-Modul
    $random_seed = truly_random_value();
    srand($random_seed);

    sub zufall...

    Bye,
    Manyak Online

  3. Moin,

    Also ich hab das für meinen Downloadbereich so gemacht:

    -Menge bilden aus Ziffern und Buchstaben -> daraus ein Array
    wo a-z0-9 jeweils nur einmal vorkommt

    -Dann aus der PERL Doku "Fisher_Yates_Shuffle" das ist
    eine Funktion die das array mischt

    -Dann sooft shift wie lang das PW werden soll (zB 8x)

    Melde dich in meinem Downloadbereich an so bekommst du
    ein solches PW automatisch zugeschickt (kost nix).
    Das Script dazu gibts natürlich auch in meinem DownloadB.

    Rolf

  4. Hallo,

    Für die Vergabe von Passwörtern soll dieses kleine Script dienen:

    [code]

    Mein Problem: Bei meiner privaten Site (bei puretec) läufts bestens,

    bei der Site die ich beruflich betreue (bei PSI-Net) wird das Passwort nur einmal ermittelt und dann nie wieder geändert. Das macht bei Passwörtern aber wenig Sinn.

    Vermutlich läuft bei letzterem eine veraltete Perlversion.
    siehe dazu: ´perldoc -f srand´

    Gruß Kai

  5. Hi,

    Mein Problem: Bei meiner privaten Site (bei puretec) läufts bestens,
    bei der Site die ich beruflich betreue (bei PSI-Net) wird das Passwort
    nur einmal ermittelt und dann nie wieder geändert.

    Was heißt das genau?
    Ich rate mal: Beim ersten Aufruf des CGI-Skripts (innerhalb einer
    Session des Webservers vielleicht?) wird ein zufälliges Passwort
    ermittelt, bei wiederholten Aufrufen dann dasselbe?

    Prüf mal, ob auf dem einen Server Dein Skript via Perl-Interpreter
    ausgeführt wird und auf dem anderen via mod_perl.
    Ich könnte mir vorstellen, daß z. B. in der mod_perl-Variante zwar beim
    ersten Aufruf von rand() implizit der seed generiert wird, bei weiteren
    aber nicht mehr, weil das Skript im Webserver gecached wird.

    Ist nur eine wilde Vermutung, würde die Symptome aber erklären.

    Viele Grüße
          Michael