Objektorientiert zu Prozedural (PHP)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Also es ist ja nun Unfug in einem Forum um Hilfe bei einem Code zu Fragen, wenn die Datenquelle (Wie wird das Passwort erstellt?) unklar ist, weil man keinen Zugriff darauf hat.
      Klär bitte ab, wie das Passwort gehasht (nicht verschlüsselt) wird und dann kann man dir auch helfen. Offensichtlich unterscheidet sich bereits der Wert in der Datenbank und das Ergebnis des Hash- und Saltvorgangs im Webinterface. Entsprechend wird das Problem wohl im jeweiligen Verfahren liegen.
    • Gut, das ändert natürlich die Ausgangslage etwas. Fang vielleicht damit an den Code etwas zu sortieren. Das Ergebnis der jeweiligen Anweisungen, die sich jetzt in der If-Clause befinden in eine Variable schreiben.
      Dann einfach mal die Variablen dumpen und hier posten. Am besten Schritt für Schritt und dann den Unterschied eingrenzen.
    • Einmal die Dumps. 3 Zeichen wurden jeweils durch "X" ersetzt da ich leider nur meinen acc zum test habe.

      VAR nutzername: NotNull //Nutzername (POST)
      VAR passwort: c48cXXX64c //Passwort (POST)
      VAR salt: }U drx05z[yG| 4O //Salt (Aus der Datenbank)
      VAR check: AD5B0723FC80EXXXC9E565E68AA63095 (Generierter Hash aus Passwort und Salt)
    • Originalcode (Teilweise vom UCP von @ReWrite):

      PHP-Quellcode: index.php

      1. if (isset($_POST['login-uname'])) {
      2. $loginUsername=$_POST['login-uname'];
      3. //$pw_md5 = md5($_POST['login-passwort']);
      4. //$password=$pw_md5;
      5. $pass = $_POST["login-passwort"];
      6. #$pw_md5 = $_POST['login-passwort'];
      7. $MM_fldUserAuthorization = "";
      8. $MM_redirectLoginSuccess = "main.php";
      9. $MM_redirectLoginFailed = "index.php#failed";
      10. $MM_redirecttoReferrer = true;
      11. $player = Player::byName($loginUsername);
      12. if(is_Object($player) )
      13. {
      14. if (strtoupper(md5($pass.$player->getSalt())) == strtoupper($player->getPasswort()) )
      15. {
      16. $_SESSION['eingeloggt'] = 1;
      17. $_SESSION['uname'] = $_POST['login-uname'];
      18. header("Location: " . $MM_redirectLoginSuccess );
      19. return;
      20. }
      21. else
      22. {
      23. header("Location: ". $MM_redirectLoginFailed );
      24. }
      25. /*
      26. //declare two session variables and assign them
      27. $_SESSION['MM_Username'] = $loginUsername;
      28. $_SESSION['MM_UserGroup'] = $loginStrGroup;
      29. if (isset($_SESSION['PrevUrl']) && true) {
      30. $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
      31. }
      32. $_SESSION['uname'] = $_POST['login-uname'];
      33. header("Location: " . $MM_redirectLoginSuccess );
      34. }
      35. else {
      36. header("Location: ". $MM_redirectLoginFailed );
      37. } */
      38. }
      Alles anzeigen



      Ist Code:

      PHP-Quellcode: /login/index.php

      1. if(isset($_POST["login-button"])) {
      2. $nutzername = mysqli_escape_string($db, $_POST["login-uname"]);
      3. echo "VAR nutzername: ".$nutzername."<br>";
      4. $passwort = mysqli_escape_string($db, $_POST["login-passwort"]);
      5. echo "VAR passwort: ".$passwort."<br>";
      6. $salt = getPlayerSalt($nutzername);
      7. echo "VAR salt: ".$salt."<br>";
      8. $check = strtoupper(md5($passwort.$salt));
      9. echo "VAR check: ".$check;
      10. if ($check == strtoupper($passwort) )
      11. {
      12. //wenn erfolgt
      13. }
      14. else
      15. {
      16. //wenn nicht erfolgt bzw. Passwort inkorrekt
      17. }
      18. }
      Alles anzeigen
      EDIT: Fast vergessen, die Funktion getPlayerSalt()

      PHP-Quellcode: /system/functions/all.php

      1. #Liest den Salt des Spielers aus
      2. function getPlayerSalt($player) {
      3. global $db;
      4. $sql = "SELECT `Salt` FROM `players`";
      5. $result = mysqli_query($db, $sql);
      6. $row = mysqli_fetch_assoc($result);
      7. return $row["Salt"];
      8. }
    • Oh mein gott... ich sollte langsam mal schlafen gehen.
      Das Problem wurde gelöst, schuld daran war, wer hätte es anders gedacht, der Depp von Coder der das gebastelt hat, also ich :'D

      Hier einmal der Fehler:

      PHP-Quellcode

      1. #Liest den Salt des Spielers aus
      2. function getPlayerSalt($player) {
      3. global $db;
      4. $sql = "SELECT `Salt` FROM `players` WHERE `Name` = '" .$player. "'";
      5. $result = mysqli_query($db, $sql);
      6. $row = mysqli_fetch_assoc($result);
      7. return $row["Salt"];
      8. }
      In Zeile 4 wird die SQL Abfrage zusammen gebaut, ich depp vergaß natürlich zu spezifizieren welchen Spieler ich anwählen möchte... somit hat er den allerletzten Datensatz eingelesen statt dem spezifizierten Spieler, kein wunder das der Hash immer falsch generiert wurde. Ich bedanke mich bei allen für Ihre kostbare Zeit und die Hilfe.
    • Wieso wird dort jetzt eine salt+hash Variante mit dem rohen Input verglichen? Natürlich sind die nicht identisch. Ich habe mir gerade nochmal deinen Ausgangscode auf der vorherigen Seite angeschaut. Was macht diese getPasswort (das t triggert hart) eigentlich? Kommt da eine salted Variante bei raus? Sonst müsstest du das ja auch noch machen, sonst passt der Vergleich nicht.
      /e Deinen Nachtrag muss ich mir jetzt erstmal angucken.. :S
      /e2 Na dann ist ja alles tutti. P.S.: Bitte mach aus getPasswort getPassword. Das is echt kacke.
    • Lars schrieb:

      Wieso wird dort jetzt eine salt+hash Variante mit dem rohen Input verglichen? Natürlich sind die nicht identisch. Ich habe mir gerade nochmal deinen Ausgangscode auf der vorherigen Seite angeschaut. Was macht diese getPasswort (das t triggert hart)
      /e2 Na dann ist ja alles tutti. P.S.: Bitte mach aus getPasswort getPassword. Das is echt kacke.
      Zu Punkt 1:
      Ja, das war auch ein Fehler von mir, Ich muss ja das gehashte Passwort mit dem aus der DB vergleichen :'ÄD

      Zu Punkt 2:
      Sei unbesorgt, das getPasswort() war vom OOP ding, im Prozeduralen teil habe ich die Funktion getPlayerPasswort() geschrieben ^^
    • NotNull schrieb:

      Oh mein gott... ich sollte langsam mal schlafen gehen.
      Das Problem wurde gelöst, schuld daran war, wer hätte es anders gedacht, der Depp von Coder der das gebastelt hat, also ich :'D

      Hier einmal der Fehler:

      PHP-Quellcode

      1. #Liest den Salt des Spielers aus
      2. function getPlayerSalt($player) {
      3. global $db;
      4. $sql = "SELECT `Salt` FROM `players` WHERE `Name` = '" .$player. "'";
      5. $result = mysqli_query($db, $sql);
      6. $row = mysqli_fetch_assoc($result);
      7. return $row["Salt"];
      8. }
      In Zeile 4 wird die SQL Abfrage zusammen gebaut, ich depp vergaß natürlich zu spezifizieren welchen Spieler ich anwählen möchte... somit hat er den allerletzten Datensatz eingelesen statt dem spezifizierten Spieler, kein wunder das der Hash immer falsch generiert wurde. Ich bedanke mich bei allen für Ihre kostbare Zeit und die Hilfe.
      Das ist aber jetzt nicht dein ernst oder?? :S Bitte sag nicht das dass dein ernst ist.. Wenn du soetwas gegen bezahlung ablieferst würde ich deinem "Klienten" direkt raten jemanden anderen zu suchen. Ich hoffe einfach mal das dass nicht dein ernst war/ist. Ich hoffe du bist dir bewusst das du, wenn du alle SQL Queries so geschrieben hast das ganze Skript volle SQL Injections ist. :thumbdown:

      EDIT:
      Und das Thema hier ist auch ein Witz.. Es ist 2018. Du solltest eventuell mit der Zeit gehen und dich hinhocken und OOP lernen.
    • Sub_tixx schrieb:

      NotNull schrieb:

      Oh mein gott... ich sollte langsam mal schlafen gehen.
      Das Problem wurde gelöst, schuld daran war, wer hätte es anders gedacht, der Depp von Coder der das gebastelt hat, also ich :'D

      Hier einmal der Fehler:

      PHP-Quellcode

      1. #Liest den Salt des Spielers aus
      2. function getPlayerSalt($player) {
      3. global $db;
      4. $sql = "SELECT `Salt` FROM `players` WHERE `Name` = '" .$player. "'";
      5. $result = mysqli_query($db, $sql);
      6. $row = mysqli_fetch_assoc($result);
      7. return $row["Salt"];
      8. }
      In Zeile 4 wird die SQL Abfrage zusammen gebaut, ich depp vergaß natürlich zu spezifizieren welchen Spieler ich anwählen möchte... somit hat er den allerletzten Datensatz eingelesen statt dem spezifizierten Spieler, kein wunder das der Hash immer falsch generiert wurde. Ich bedanke mich bei allen für Ihre kostbare Zeit und die Hilfe.
      Das ist aber jetzt nicht dein ernst oder?? :S Bitte sag nicht das dass dein ernst ist.. Wenn du soetwas gegen bezahlung ablieferst würde ich deinem "Klienten" direkt raten jemanden anderen zu suchen. Ich hoffe einfach mal das dass nicht dein ernst war/ist. Ich hoffe du bist dir bewusst das du, wenn du alle SQL Queries so geschrieben hast das ganze Skript volle SQL Injections ist. :thumbdown:
      EDIT:
      Und das Thema hier ist auch ein Witz.. Es ist 2018. Du solltest eventuell mit der Zeit gehen und dich hinhocken und OOP lernen.
      Ich glaube du hast noch nie in meine Signatur geschaut, ich mache das weder Professionell noch gegen Bezahlung. Zudem bin ich immernoch Auszubildender und muss aktuell ein wenig anderes lernen. Da ist ein komplett neuer Scripting Stil grade ein wenig zu viel des Guten. Man kann ja nicht einen Schritt vor dem anderen setzen.
      Das nächste ist das der von dir zitierte Code Ausschnitt natürlich nicht escsped ist, dies passiert alles im Login System welches auch noch erweitert wurde. Mit freundlichen Grüßen.

      #Handy