JoomlaCamp 2018 Essen - 03.02.2017 in Essen

Joomla 3.8.1 Hashwerte Passwörter - wie werden sie erstellt?

    Joomla 3.8.1 Hashwerte Passwörter - wie werden sie erstellt?

    Hallo,

    ich bin absoluter Neuling in Sachen Programmieren, habe auch nur wenig Kenntnisse im Bereich PHP etc. Aber ich habe mir ein ambitioniertes Ziel gesteckt. An einem Punkt komme ich aber nicht weiter und benötige eure Hilfe.

    Mein Plan ist es eine Handy App zu programmieren, die die Inhalte der Joomla Datenbank, in diesem Fall einer Shoutbox, abruft und übersichtlich auf dem Smartphone darstellt. Das funktioniert auch bereits. Ich übergebe alle relevanten Daten an ein PHP Script, welches mir die Datenbank ausliest und der response wird auf dem Endgerät entsprechend ausgewertet. Bislang kann dies aber jeder Benutzer. Keine authentifizierung nötig.....

    Mein Problem liegt bei der Abfrage der Passwörter, die bereits in der Joomla Datenbank als Hashwert abgelegt sind. Ich müsste wissen, nach welchem Verschlüsselungsverfahren Joomla 3.8.1 diese Hashwerte generiert. Ich meine jetzt gefunden zu haben, dass bcrypt verwendet wird......

    Wenn ich aber einen bcrypt Generator bemühe und ein Passwort eingebe, dann stimmt dies nicht mit dem in der Joomla Datenbank gespeicherten Hashwert überein. Wie kann das sein?

    Mein Plan war, die Benutzerdaten der MYSQL Datenbank abzufragen, auf dem Endgerät Benutzername und Passwort eingeben zu lassen, es dann mit demselben Verschlüsselungsverfahren wie Joomla verwendet zu verschlüsseln und zu vergleichen.

    Meine konkreten Fragen:

    1. Welches Verfahren verwendet Joomla 3.8.1 (mit php 7.1) zum erstellen der Hashwerte der Passwörter?
    2. Wenn es bcryt ist, warum bekomme ich immer andere Hashwerte als in der Datenbank?
    3. Ist meine Vorgehensweise, wie ich es beschrieben habe stimmig und richtig?

    Danke für die Hilfe

    Kaukasus schrieb:


    Mein Plan war, die Benutzerdaten der MYSQL Datenbank abzufragen, auf dem Endgerät Benutzername und Passwort eingeben zu lassen, es dann mit demselben Verschlüsselungsverfahren wie Joomla verwendet zu verschlüsseln und zu vergleichen.


    Detailanmerkung: Hashen ist nicht Verschlüsseln, dementsprechend ist bcrypt auch ein Hashverfahren und kein Verschlüsselungsverfahren ;)

    Kaukasus schrieb:


    1. Welches Verfahren verwendet Joomla 3.8.1 (mit php 7.1) zum erstellen der Hashwerte der Passwörter?


    Bcrypt, generiert über die password_hash Funktion von PHP: php.net/manual/de/function.password-hash.php

    Kaukasus schrieb:


    2. Wenn es bcryt ist, warum bekomme ich immer andere Hashwerte als in der Datenbank?


    Zwei Gründe:
    1. kann die Syntax der abgespeicherten Daten (in so einem String ist normalerweise der verwendete Algorithmus, der eigentlicht Hash und der Salt enthalten) unterschiedlich sein
    2. kannst du zwei generierte Hash-plus-Info-Strings (siehe oben) nur dann vergleichen, wenn bei beiden Strings der identische Salt verwendet wurde

    Lange Rede, kurzer Sinn: verwende password_verify zusammen mit password_hash: php.net/manual/de/function.password-verify.php

    Kaukasus schrieb:


    3. Ist meine Vorgehensweise, wie ich es beschrieben habe stimmig und richtig?


    Das hängt davon ab, wo du den Vergleich durchführst - der sollte (offensichtlich) auf dem Server und nicht in deiner Software auf dem Endgerät stattfinden, aber ich denke das ist klar.
    Danke, werde mich mal an die Abarbeitung der Infos machen ..... Danke dafür

    as hängt davon ab, wo du den Vergleich durchführst - der sollte (offensichtlich) auf dem Server und nicht in deiner Software auf dem Endgerät stattfinden,

    hmmm, so klar ist mir das nicht. Die Hashwerte (sorry natürlich keine Verschlüsselung :) ) sind doch nicht zurückrechenbar...... Somit kann ich die doch durch die Gegend schicken wie ich lustig bin, oder? Ich nehme an es geht um das Auswerten ob true oder false? Oder warum muss das unbedingt auf dem Server stattfinden?
    Danke...... Dieses Script hat funktioniert (ist aus dem Link)


    <?php
    // this will result in 'Invalid Password' as the hash is parsed into 3 variables of

    // due to it being enclosed inside double quotes


    // this will result in 'Password is valid' as variables are not parsed inside single quotes
    $hash = 'HASHWERT AUs DB';

    if (password_verify('KLARTEXT PW', $hash)) {
    echo 'Password is valid!';
    } else {
    echo 'Invalid password.';
    }
    ?>
    Aber wie schaffe ich es jetzt auf meinem Endgerät das Klartext Passwort in den Hashwert zu verwandeln? Ich will ja nicht in Klartext etwas zum Server senden......
    Den SALT Anteil kenn e ich ja nicht, richtig? Den kann ich auch nicht herausbekommen?
    Ich schnalle nicht ganz wie ich ein sicheres Login ohne Übermittlung von Klartext hinbekommen soll....

    Danke nochmal
    Puh.... jetzt wird es kompliziert glaube ich. KAnnich auf dem Endgerät TLS erzwingen? Und der Server kann das auch?

    Ich glaube fast, das ist alles eine Nummer zu groß für mich.

    Ich habe es jetzt nicht einmal hinbekommen, eine Datenbankverbindung aufzubauen, den Hashwert des entsprehenden Users aus der DB auszulesen und den dann den Hashwert mittels password_verify zu vergleichen. Danach müsste ja dann das Script aufgerufen werden, was die Inhalte aus der DB abruft.

    Das ist alles sehr kompliziert.....

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kaukasus“ ()

    Kaukasus schrieb:


    absoluter Neuling in Sachen Programmieren...

    Mein Plan ist es eine Handy App zu programmieren, die die Inhalte der Joomla Datenbank, in diesem Fall einer Shoutbox, abruft

    Mein Plan war, die Benutzerdaten der MYSQL Datenbank abzufragen,


    Du solltest dir aber im klaren darüber sein das wenn du auf dem Smartphone eine App installierst in der die Zugangsdaten zur Joomla-Datenbank hinterlegt sind es ein leichtes ist für einen Hacker der an die App kommt diese Zugangsdaten zu extrahieren und damit sich Zugang zu deiner Website und dem gesammten Webspace zu verschaffen! Selbst wenn du diese Zugangsdaten zur Datenbank per TLS vom Webserver erst nach erfolgreicher Authentifizierung in den Arbeitsspeicher des Smartphone überträgst kann prinzipiell jeder der die Authentifizierung "übersteht"an diese Zugangsdaten kommen wenn er ein wenig Hackerkenntnisse besitzt. Wenn du z.B. also einen Benutzer hast der eine unsichere Kombination von Benutzername und Passwort hat oder fahrlässig mit diesen Daten umgeht wäre das dann ein Sicherheitsproblem für deinen gesammten Webspace. usw....
    Fragen und Antworten zu Joomla in den Joomla-FAQ´s & How To´s :!:

    Die Suchfunktion hier im Forum ist dort: forum.joomla.de/index.php/Search/ pleasantry

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Sieger66“ ()

    Neu

    Du solltest dir aber im klaren darüber sein das wenn du auf dem Smartphone eine App installierst in der die Zugangsdaten zur Joomla-Datenbank hinterlegt sind es ein leichtes ist für einen Hacker der an die App kommt diese Zugangsdaten zu extrahieren und damit sich Zugang zu deiner Website und dem gesammten Webspace zu verschaffen!


    Derzeit habe ich die Daten, die nötig sind um die Datenbankverbindung aufzubauen, in eine PHP Datei gelegt, die auf dem Server in einem geschützten Verzeichnis (.htaccess) liegt. Diese Datei wird per require_once eingebunden.
    Also die Daten für die Datenbank sind nicht auf dem Endgerät. Was mir aber noch fehlt, ist die Authentifizierung, dass nicht jeder dieses Script zum Auslesen der Datenbank, welches wiederum die Zugangsdaten per require einliest, ausführen kann. Dazu wollte ich ja eine Authentifizierung mit den Benutzerdaten der Joomla Datenbank machen. Oder bin ich falsch gewickelt?

    TLS (https) bekommst du bei den meisten Webspaces, im Gerät musst du das dann einfach über die entsprechende hardcodierte URL sicherstellen. Du fragst User und Passwort im Gerät ab, schickst dass per HTTPS-Request an den Server, verifizierst dort und gibst ein Ergebnis zurück.

    Das heisst also, wenn ich die Seite per

    Quellcode

    1. https://xxxxxx
    aufrufe habe ich automatisch TLS? Muss also bei der Programmierung gar nichts beachten? Außer den request natürlich so aufzubauen? Kann also aus einem Eingabefeld der App im Klartext die Daten übermitteln, vergleiche dann mit password_verify die gesendeten Daten von der App auf dem Server mit den hinterlegten Daten in der Datenbank?

    Oder alles falsch?

    Neu

    Kaukasus schrieb:


    Das heisst also, wenn ich die Seite per

    Quellcode

    1. https://xxxxxx
    aufrufe habe ich automatisch TLS? Muss also bei der Programmierung gar nichts beachten? Außer den request natürlich so aufzubauen? Kann also aus einem Eingabefeld der App im Klartext die Daten übermitteln, vergleiche dann mit password_verify die gesendeten Daten von der App auf dem Server mit den hinterlegten Daten in der Datenbank?


    Korrekt!

forum.joomla.de is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.