Ergebnis 1 bis 19 von 19

Thema: Eigene Passwortabfrage

  1. #1
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard Eigene Passwortabfrage

    Hallo!

    Ich möchte gerne die Benutzernamen und Passwörter der Mitglieder aus der tl_member für einen weiteren Login außerhalb Contao nutzen. Leider verstehe ich nicht, wie ich das eingegebene Passwort verschlüsseln muss, damit ich es mit dem gespeicherten vergleichen kann. Früher wurde wohl der salt nach einem ":" mitgeliefert.

    Zitat Zitat von raveolution Beitrag anzeigen
    Hallo asteireif,

    wenn ich den Code in der User.php richtig verstehe ist es wirklich so, dass für jedes Passwort ein neuer Salt generiert wird und zusammen mit dem Passwort (getrennt durch : ) in der DB gespeichert wird.

    Dabei wird der Salt so generiert:
    PHP-Code:
    $strSalt substr(md5(uniqid(mt_rand(), true)), 023);
    $strPassword sha1($strSalt $this->Input->post('password'));
    $this->password $strPassword ':' $strSalt
    Und genau so kannst du es ja dann auch wieder validieren. Nur generierst du dann keinen neuen Salt, sondern nimmst den Salt hinter dem Passwort aus der DB.
    Wie funktioniert das mit Contao 3.5.x?

    Vielen Dank für Eure Hilfe!

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    in Contao 3.5 wird das so gemacht:
    PHP-Code:
    \Encryption::hash('passwort'); 
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Hallo!

    Vielen Dank! Aber bei dieser Abfrage befinde ich mich nicht in Contao sondern in einem eigenen kleinen php-Skript.

  4. #4
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    na dann schau dir doch einfach an was die hash Methode macht und übernimm sie 1:1 in dein kleines Script

    PHP-Code:
    /**
     * Generate a password hash
     *
     * @param string $strPassword The unencrypted password
     *
     * @return string The encrypted password
     *
     * @throws \Exception If none of the algorithms is available
     */
    public static function hash($strPassword)
    {
       
    $intCost = \Config::get('bcryptCost') ?: 10;

       if (
    $intCost || $intCost 31)
       {
          throw new \
    Exception("The bcrypt cost has to be between 4 and 31, $intCost given");
       }

       if (
    function_exists('password_hash'))
       {
          return 
    password_hash($strPasswordPASSWORD_BCRYPT, array('cost'=>$intCost));
       }
       elseif (
    CRYPT_BLOWFISH == 1)
       {
          return 
    crypt($strPassword'$2y$' sprintf('%02d'$intCost) . '$' md5(uniqid(mt_rand(), true)) . '$');
       }
       elseif (
    CRYPT_SHA512 == 1)
       {
          return 
    crypt($strPassword'$6$' md5(uniqid(mt_rand(), true)) . '$');
       }
       elseif (
    CRYPT_SHA256 == 1)
       {
          return 
    crypt($strPassword'$5$' md5(uniqid(mt_rand(), true)) . '$');
       }

       throw new \
    Exception('None of the required crypt() algorithms is available');

    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  5. #5
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Hallo!

    Habe ich probiert, aber das funktioniert außerhalb der Contao-Umgebung ja auch nicht.
    Man müsste den Code ja umschreiben, denn
    PHP-Code:
    \Config::get('bcryptCost'
    müsste auch wieder ersetzt werden. Zudem gibt es schon Probleme beim erstellen der Funktion

    PHP-Code:
    public static function hash($strPassword
    Code:
    Parse error: syntax error, unexpected 'public' (T_PUBLIC)
    bzw.
    Code:
    Fatal error: Cannot redeclare hash()
    Und hier sieht man mal wieder, dass ich ein absoluter php-DAU bin.

    Ich hatte gehofft, dass es evtl. einen kleinen Dreizeiler (wie oben zitiert) gibt.

  6. #6
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Warum machst Du es nicht "ordentlich" und bindest das andere Skript in Contao ein? Dann könntest Du ja auf alles zugreifen....?

    Wie sieht denn Dein Script aus, zeig doch mal...

  7. #7
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Ohje,

    hier die "Musterlösung", weil sonst wird das nie was ;-)
    Und ja, natürlich hättest du das Script noch umschreiben müssen und es ist auch klar, dass du nicht einfach eine nackte Methode in ein Script ohne Klasse packen kannst.


    Füg in dein PHP-Script das hier ein, dann müsste es passen. In $strHash hast du dann deinen Hash

    PHP-Code:
       
    function passworthash($strPassword)
    {
        
    $intCost 10;


       if (
    function_exists('password_hash'))
       {
          return 
    password_hash($strPasswordPASSWORD_BCRYPT, array('cost'=>$intCost));
       }
       elseif (
    CRYPT_BLOWFISH == 1)
       {
          return 
    crypt($strPassword'$2y$' sprintf('%02d'$intCost) . '$' md5(uniqid(mt_rand(), true)) . '$');
       }
       elseif (
    CRYPT_SHA512 == 1)
       {
          return 
    crypt($strPassword'$6$' md5(uniqid(mt_rand(), true)) . '$');
       }
       elseif (
    CRYPT_SHA256 == 1)
       {
          return 
    crypt($strPassword'$5$' md5(uniqid(mt_rand(), true)) . '$');
       }
    }

    $strHash passworthash('passwort_im_klartext'); 
    Geändert von the_scrat (23.02.2017 um 10:11 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  8. #8
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Da hast Du Recht!!!

    Das funktioniert schon super. Nur noch eine Kleinigkeit...
    Der Salt wird ja noch per Zufall erstellt, weshalb das mit dieser Methode verschlüsselte Passwort nicht dem in der Datenbank gespeicherten entspricht. Kann man den Salt aus dem alten Passwort herauslesen, wie das früher ging?

    Vielen Dank für Deine Bemühungen!

  9. #9
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Was für ein Contao hast du denn im Einsatz? In Contao 3 werden alle alten Passworthashes automatisch in das neue Format gebracht. Welche Hashes hast du denn in der DB? Ansonsten müsste halt noch der 3 Zeiler aus deinem ersten Post zur Verifizierung verwendet werden.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  10. #10
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Ich benutze Contao 3.5.x

    Die Passwörter sehen z. so aus: $2y$10$89d523a86622a9cb61c2euABezFbSnrXxxZrLZwNVej yJFctqN6wS (natürlich sind die Xxx durch andere Zeichen ersetzt).

  11. #11
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Ja also was willst du dann irgendwelche Salt auslesen? Vergleich doch einfach den generierten Hash mit dem Hash in der DB und alles ist gut
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  12. #12
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Weil der Hash für das gleiche Passwort in der Datenbank so
    $2y$10$89d523a86622a9cb61c2euABezFbSnrXxxZrLZwNVej yJFctqN6wS
    und nach Deinem Skript so
    $2y$10$xVjyWz1D3OkVrorUT0fRjuuXNfz060XxX1Zty/pcaN9cebMzqODHu
    aussieht und ich dachte, dass das evtl. an einem Hash liegt.

  13. #13
    Contao-Fan
    Registriert seit
    27.06.2010.
    Beiträge
    539

    Standard

    Anstatt hash == \Encryption::hash() zu benutzen,
    wäre es richtiger \Encryption::verify(password, hash) zu verwenden.
    Oder gleich einfach nur password_verify() verwenden. Darauf kommt es bestimmt auch nicht mehr an.

  14. #14
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Hallo Richard!

    Ich denke, dass das password_verify() genau das ist, was ich suche. Außerhalb Contaos wird diese Funktion aber wahrscheinlich nicht definiert sein. Weißt Du zufällig, wo ich den Code dazu finde?

  15. #15
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Blödsinn, sorry!

    Natürlich ist das eine php-Befehl. Aber nun brauche ich wieder einen Hash...

  16. #16
    Contao-Fan
    Registriert seit
    27.06.2010.
    Beiträge
    539

    Standard

    Die Funktion ist außerhalb Contao ab PHP5.5 definiert; sollte auf jeden Fall machbar sein. Der Host, auf der Contao läuft, un der host, auf der das Skript läuft, brauchen PHP 5.5 dann

  17. #17
    Contao-Fan
    Registriert seit
    27.06.2010.
    Beiträge
    539

    Standard

    Zitat Zitat von TLight Beitrag anzeigen
    Aber nun brauche ich wieder einen Hash...
    Der hash ist das, was in der Datenbank gespeichert ist.

  18. #18
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Oh Mann. Danke...!

  19. #19
    Contao-Nutzer Avatar von TLight
    Registriert seit
    30.06.2009.
    Ort
    bei München
    Beiträge
    168

    Standard

    Es funktioniert!! Entschuldigt bitte, dass ich mich so doof ausgedrückt habe. Das ganze ist mit einer simplen Zeile erledigt...

    Vielen Dank!!!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •