[jTuT] MySQL R41-4 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)

  • Ich hab das Problem, dass wenn ich mich einloggen möchte das Passwort nicht verschlüsselt wird. (Passwort wird in Klartext angezeigt)


    Print:

    SQL
    1. SELECT * FROM accounts WHERE Name = 'Swarlos' AND Passwort = MD5(MD5('Passwort'))

    Das ist der Quellcode:

    Code
    1. new passwort[50];
    2. format(passwort, 50, "%s", inputtext);
    3. mysql_escape_string(passwort, passwort);
    4. mysql_format(Handle, SQL, sizeof(SQL), "SELECT * FROM accounts WHERE Name = '%e' AND Passwort = MD5(MD5('%s'))", SpielerInfo[playerid][pName], passwort);
    5. printf("%s", SQL);

    Auch wenn ich alles bis Zeile 4 weglasse, dann passiert das selbe.

  • Ist die doppelte MD5 Nutzung bewusst so gemacht?
    Wenn ja, im print zeigt es dir das Passwort zwischen den beiden MD5's im Klartext an, da die Umwandlung nicht im mysql_format geschieht, sondern in nachfolgenden Prozessen, die deine "SQL" Variable nicht mehr betreffen.

    sigsmall_winter.png

  • Kannst du den String des MD5 Wertes aus der Datenbank bitte mal posten? Gebe als Passwort bei der Registrierung Test oder Passwort ein.



    Der Download-Button funktioniert anscheinend nicht mehr.

    Du kannst die Daten aus dem Anhang herunterladen. Der Button verweist nur dahin, ist aber durch die Umstellung der Domain nicht mehr aktuell. Ich werde das am Wochenende in allen meinen Threads anpassen.

    sigsmall_winter.png

  • Also ich hab als Klartext "passwort" eingegeben. In der DB wurde das gespeichert: d6707bc3217f7ad5277cc0b8f0adbcb5
    nun hab ich mal auf einer MD5 seite passwort 2x verschlüsselt und genau das selbe herausbekomme, also liegt das am Login :/


    Das ist der Code der bei OnDialog... aufgerufen wird:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • SQL
    1. DELETE FROM tabelle WHERE id = 'ID'

    z.b.


    Alle anderen Grundfunktionen von MySQL bekommst du hier schön erklärt

    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

    ---
    ICH BIN NUR HIER UM LEUTE ANZUSCHREIEN

  • Man muss sagen das es eines der ersten Tutorials ist die man auf SA-MP.de sieht das großzügig beschrieben ist.
    Ich persönlich habe es zwar nicht benötigt, fand aber mal die Materie interessant und wie du die Tutorials schreibst.


    Weiter mit der guten Arbeit, mir würden die ganzen Leute im Forum schon den Kopf zerbrechen, aber du bleibst dran! ;)

  • Jeffrey ist einer der wenigen der wirklich mal Ahnung hat, von dem was er erzählt. Ich respektiere Ihn dafür, dass er soviel Geduld mit sich bringt und so vielen Leuten hilft.


    Ist auch einer der wenigen Tutorials die sich mit dem komplexen Thema MySQL befassen.
    :thumbup:

    Chief Technology Officer (CTO)

  • Hallo Leute,
    trotz das Jeffry auf Reisen ist. Kann mir jemand eventuell helfen?
    Bei mir speichert es absolut keine Daten.
    Ich vermute jedoch das es an SaveUserStats liegt.
    Kann mir hier jemand helfen?



    stock SaveUserStats(playerid)
    {
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', language = '%i',money = '%i', kills = '%i', deaths = '%i' WHERE id = '%d'",
    PlayerInfo[playerid][pLevel],PlayerInfo[playerid][planguage],GetPlayerMoney(playerid), PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);
    return 1;
    }

  • Du musst nach mysql_format auch mysql_tquery oder mysql_pquery verwenden. Schau dir das tutorial nochmal an.

  • Hi, danke für die schnelle Rückantwort.
    Also ja, das hat gefehlt, leider ohne Erfolg.


    Habe mal die Log eingeschaltet:



    [11:34:18] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
    [11:34:18] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
    [11:34:18] [DEBUG] CMySQLConnection::Connect - connection was successful
    [11:34:18] [DEBUG] CMySQLConnection::Connect - connection was successful
    [11:34:18] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
    [11:34:18] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
    [11:34:18] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
    [11:34:37] [DEBUG] mysql_format - connection: 1, len: 128, format: "SELECT id FROM users WHERE name = '%e'"
    [11:34:37] [DEBUG] mysql_pquery - connection: 1, query: "SELECT id FROM users WHERE name = 'pinguin'", callback: "OnUserCheck", format: "d"
    [11:34:37] [DEBUG] CMySQLQuery::Execute[OnUserCheck] - starting query execution
    [11:34:37] [DEBUG] CMySQLQuery::Execute[OnUserCheck] - query was successfully executed within 0.393 milliseconds
    [11:34:37] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
    [11:34:37] [DEBUG] Calling callback "OnUserCheck"..
    [11:34:37] [DEBUG] cache_get_row_count - connection: 1
    [11:34:37] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called
    [11:34:41] [DEBUG] mysql_format - connection: 1, len: 256, format: "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))"
    [11:34:41] [DEBUG] mysql_pquery - connection: 1, query: "INSERT INTO users (name, password) VALUES ('pinguin', MD5('lol')", callback: "OnUserRegister", format: "d"
    [11:34:41] [DEBUG] CMySQLQuery::Execute[OnUserRegister] - starting query execution
    [11:34:41] [DEBUG] CMySQLQuery::Execute[OnUserRegister] - query was successfully executed within 36.794 milliseconds
    [11:34:41] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
    [11:34:41] [DEBUG] Calling callback "OnUserRegister"..
    [11:34:41] [DEBUG] cache_insert_id - connection: 1
    [11:34:41] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called



    //edit:
    Habe den Fehler nun gefunden. Ich glaube im Tutorial selbst wurde dies auch nicht gemacht.
    Der Spieler wird nach dem Registrieren nicht eingeloggt. Somit wird er erst garnicht beim Verlassen gespeichert. Trotzdem danke für die Hilfe :)

    Einmal editiert, zuletzt von RezZ ()

  • Was man vielleicht noch sagen sollte ist, dass die Verschlüsselung hier von md5 nichts bringt, da kein Salt verwendet wird.


    Durch Rainbowtables kann man hier ganz einfach das Passwort filten, welches verwendet wurde und dann sieht man das:


    098f6bcd4621d373cade4e832627b4f6 = test


    ist :D


    Also für alle die hashen wollen und nicht wollen, dass man direkt das Passwort hat, mal nach "Salt" googeln und halt einfach das Passwort mit Salt hashen lassen ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen