bambi: Passwort auf Sicherheit prüfen

Ich brauche eine Funktion die Passwörter auf ihre Sicherheit prüft. Ich häng an der stelle wo untersucht werden soll wieviele kleinbuchstaben, großbuchstaben und zahlen oder zeichen im string enthalten sind.
ich habs mit preg_match(_all) versucht, was mir aba nich die gewünschten erfolge brachte.

kann mir bitte jemand helfen ?

danke im vorraus
g

  1. Hello,

    Ich brauche eine Funktion die Passwörter auf ihre Sicherheit prüft. Ich häng an der stelle wo untersucht werden soll wieviele kleinbuchstaben, großbuchstaben und zahlen oder zeichen im string enthalten sind.
    ich habs mit preg_match(_all) versucht, was mir aba nich die gewünschten erfolge brachte.

    kann mir bitte jemand helfen ?

    Ich eigentlich nicht wirklich, aber öffentlich denken kann ich ja mal.

    Was macht denn ein Passwort "sicher"?
    Dass man es nicht leicht erraten kann
    Dazu müsste ich mir erstmal überlegen, wie ich denn Passworte erraten würde:

    • Wörterbuch nur mit Kleinschreibung / Großschreibung
    • Wörterbuch unter Beachtung der Orthografie
    • Wörterbuch unter Verwürfelung der Groß-Kleinschreibung
    • Mustergenerator
        .. einfache Muster zuerst
        ... alles Gleiche
        ... einfache Reihen

    usw.

    Sicher gibt es dafür auch mathematisch optimierte Vorgehensweisen.

    In den Lücken zwischen den entstehenden Toleranzräumen liegen Deine "sicheren" Passworte

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  2. Hi :-),

    gukstu hier < http://www.webmasterwelt.net/artikel,453,-%5Btutorial---script%5D-passwort-generator.html>

    Vielleicht ist da was für dich dabei.

    Gruß

    SeKo

    1. nein, leider, die funktion erstellt selbst das passwor (meiner meinung nach sogar zu umständlich). bei mir bekomme ich das gewünschte passwort per usereingabe und will nur überprüfen ob er groß,klein und ziffern eingegeben hat.

      und das passwörter unsicher sind ist mir klar, ich hätte trotzdem gerne eine solche funktion.

      1. Hello,

        nein, leider, die funktion erstellt selbst das passwor (meiner meinung nach sogar zu umständlich). bei mir bekomme ich das gewünschte passwort per usereingabe und will nur überprüfen ob er groß,klein und ziffern eingegeben hat.

        Dann brauchst Du doch nur ein preg_match mit einer entsprechenden Vorgabe zu machen. Das würde ich wahrscheinlich sogar hinbekommen (weil ich die RegExps doch so liebe ...)

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. ich bin mir nicht ganz sicher, aber ich glaub ich such genau so eine  RegExpr.

          1. Hi bambi,

            ich bin mir nicht ganz sicher, aber ich glaub ich such genau so eine  RegExpr.

            RegExp heißt übrigens Regular Expression, d.h. Regulärer Ausdruck ;-)

            Zuerst solltest du prüfen, ob keine verbotenen Zeichen im Passwort vorkommen. Also, was darf alles drin vorkommen? Buchstaben, Zahlen, Unterstrich, Bindestrich, ...

            Wenn das Passwort nur Buchstaben und Zahlen enthalten darf, und mindestens 5 Zeichen lang sein soll, dann solltest es erst mal so überprüfen:
            /[1]{5,}$/

            Wenn du jetzt noch testen möchtest ob das Passwort mindestens eine Zahl enthält:
            /[0-9]/

            Und um zu prüfen ob er mindestens einen Buchstaben enthält:
            /[a-zA-Z]/

            Mit preg_match() kannst du die RegEx anwenden. Ansonsten schau mal noch in die Pattern Syntax, eventuell brauchst du auch noch Modifikatoren.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
            Den Selfcode kann man sich übrigends hier entschlüsseln lassen:
            http://www.peter.in-berlin.de/projekte/selfcode/

            1. a-zA-Z0-9_- ↩︎

            1. die funktion schaut jetzt so aus:

              function pw_check($zk)
              {
               return (preg_match("/[1]{5,}$/",$zk,$treffer) && preg_match("/[0-9]/",$zk) && preg_match("/[a-zA-Z]/",$zk));
              }

              war doch ganz einfach :)

              danke an alle für die hilfe !!
              lg


              1. a-zA-Z0-9 ↩︎

              1. Hi bambi,

                war doch ganz einfach :)

                dann ist ja gut *g*

                btw: Ich würde noch einen _ im PW erlauben.

                MfG, Dennis.

                --
                Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                Bedeutung meines SelfCodes
  3. Tag bambi.

    Ich brauche eine Funktion die Passwörter auf ihre Sicherheit prüft. Ich häng an der stelle wo untersucht werden soll wieviele kleinbuchstaben, großbuchstaben und zahlen oder zeichen im string enthalten sind.

    Du könntest den Passwortstring zerlegen und das Vorkommen der einzelnen Zeichen zählen, die Funktion count_chars könnte dir dabei helfen. Hier findest du ein Codebeispiel zur Verwendung von count_chars. Jetzt musst du nur noch eine Häufigkeitsregel aufstellen und auf das Ergebnis von count_chars anwenden.

    Nur so 'ne Idee :-)

    Siechfred

    --
    »Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«
    1. is ein wenig komplizierter als ich mir das anfangs vorgestellt habe.
      ich werde das aber so machen, wenn sich nichts anderes findet.

      danke

  4. Hi,

    Ich brauche eine Funktion die Passwörter auf ihre Sicherheit prüft. Ich häng an der stelle wo untersucht werden soll wieviele kleinbuchstaben, großbuchstaben und zahlen oder zeichen im string enthalten sind.

    Du bist Dir darüber im Klarem, das _alle_ Regeln gegen die Entropie arbeiten? D.h. auch die Regel, das ein Paßwort eben _nicht_ aus Worten bestehen soll, möglichst bunt durchmischt usw sind Regeln und machen bei strenger Einhaltung das Paßwort schlechter. Wenn Du deren Einhaltung rechentechnisch überprüfst und nur Paßworte zuläßt, die diesen Regeln entsprechen widerspricht das der Grundregel des Kryptographie "Sicherheit durch Verschleierung funktioniert nicht!", denn Du müßtest die Regeln, die Du anwendest geheim halten. Das kannst Du aber nicht, da man diese Regeln ja ausprobieren kann.

    Wie nun ausbrechen aus dem Dilemma? Indem Du einfach sehr viele Regeln aufstellst, sie jedoch zufällig auswählst.

    Zu kompliziert? Gut, dann der normale Weg ;-)

    Ich bin nicht der PHP-Guru, deshlab möge man mich nicht nur für meinen Code ausschimpfen, sondern ihn dann bitte auch korrigieren, danke.

    function islower($c){
      return((ord($c)-97)<26&&(ord($c)-97)>=0)?1:0;
    }
    function isupper($c){
      return ((ord($c)-65)<26&&(ord($c)-65)>=0)?1:0;
    }
    function isdigit($d){
      return ((ord($d)-48)<10&&(ord($d)-48)>=0)?1:0;
    }

    function checkEntropy($pw, $length){

    $num=$up=$low=$nas=0;
      $avg=0.0;

    for($x=0;$x<$length;$x++){
        if(strchr($char,$pw{$x})) return -1; /* keine Doubletten */
        $char .= $pw{$x};
        if(isupper($pw{$x}))$up++;  /* Großbuchstaben */
        if(isdigit($pw{$x}))$num++; /* Zahlen */
        if(ord($pw{$x})>128)$nas++; /* Umlaute usw */
        if(islower($pw{$x}))$low++; /* Kleinuchstaben */
        $avg += ord($pw{$x});
      }
      /* mindestens von jedem eines */
      if($up == 0 ||  $num == 0 || $low == 0 || $nas == 0)
        return -1;

    /*Paßwortentropie an diesem Punkt ist 2,99<x<3 Bit/Oktet*/

    /* Rückgabe des Durchschnittwertes aller Zeichen */
        return $avg/8;
    }

    /*Du kannst auch noch die Umlaute in Groß/klein aufteilen:*/

    function latin1_islower($c){
    return ( ((ord($c)>=97)&&(ord($c)<=122))
           ||
           ((ord($c)>=223)&&(ord($c)<=255)&&(ord($c)!=247)))?1:0;
    }

    function latin1_isupper($c){
    return ( ((ord($c)>=65)&&(ord($c)<=90))
           ||
           ((ord($c)>=192)&&(ord($c)<=222)&&(ord($c)!=215)) )?1:0;
    }

    so short

    Christoph Zurnieden

    1. Hi Christoph,

      Ich bin nicht der PHP-Guru, deshlab möge man mich nicht nur für meinen Code ausschimpfen, sondern ihn dann bitte auch korrigieren, danke.

      ok, bitte schön:

      function islower($c){
        return((ord($c)-97)<26&&(ord($c)-97)>=0)?1:0;
      }

      Hier würde ich ein preg_match("/[1]$/", $d) bevorzugen, aber vermutlich ist deine Methode schneller, da dafür die die RegEx Engine angeworfen werden muss.

      Ah, da fällt mir gerade noch was ein: Vielleicht könnte man mit if($d == strtoupper($d)) was machen...

      function isupper($c){
        return ((ord($c)-65)<26&&(ord($c)-65)>=0)?1:0;
      }

      Hier selbiges wie oben.

      function isdigit($d){
        return ((ord($d)-48)<10&&(ord($d)-48)>=0)?1:0;
      }

      Dazu stellt PHP schon die Funktion is_numeric() bereit.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
      Den Selfcode kann man sich übrigends hier entschlüsseln lassen:
      http://www.peter.in-berlin.de/projekte/selfcode/

      1. a-z ↩︎

      1. Hi,

        function islower($c){
          return((ord($c)-97)<26&&(ord($c)-97)>=0)?1:0;
        }

        Hier würde ich ein preg_match("/[1]$/", $d) bevorzugen, aber vermutlich ist deine Methode schneller, da dafür die die RegEx Engine angeworfen werden muss.

        Ich bin ja auch der Feind von Microoptimierung, aber eine Vermeidung der RegEx-Maschine ist durchaus recht effektiv ;-)

        Zudem ist das altbewährter C-Code -- mehr oder weniger die Macros aus ctype.h nach PHP übersetzt, was außer den paar ord() praktisch nur C&P war.

        Ah, da fällt mir gerade noch was ein: Vielleicht könnte man mit if($d == strtoupper($d)) was machen...

        Das wäre dann Microoptimierung. Evt sogar langsamer falls bei strtoupper() kein Macro auf eine Hashtabelle zugreift.

        function isdigit($d){
          return ((ord($d)-48)<10&&(ord($d)-48)>=0)?1:0;
        }

        Dazu stellt PHP schon die Funktion is_numeric() bereit.

        Die ist aber relativ neu, oder? Da keine PHP-Version angegeben wurden, sah ich mich gezwungen alles so abwärtskompatibel, wie möglich zu halten. Außerdem prüft diese Funktion nicht, ob es sich bei einem Zeichen um eine Ziffer handelt, sondern ganz allgemein um eine Zahl. Das ist deutlich mehr, als benötigt wird.

        Was mich aber ernsthaft wundert: trotz der Simplizität der Funktionen gibt es die Typen aus ctype.h bei PHP nicht. Oder war ich nur zu blöd, sie zu finden?

        so short

        Christoph Zurnieden


        1. a-z ↩︎