PHP - Auslesen und wiedergeben aus Datenbank

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

    • Nette Seite! Werde sie mir auf jeden Fall mal weiter durchlesen. Das hat es mit Session auf sich :)


      $query = "SELECT * FROM players WHERE Passwort LIKE '".$password."' LIMIT 1, 1";
      $username = mysql_real_escape_string($username);
      $result = mysql_query($query) or die(mysql_error());

      while($row = mysql_fetch_array($result)){
      $resusername = $row['username'];
      $respassword = $row['password'];

      }

      if ($respassword == $password) {

      Was hat es mit diesen Zeilen auf sich?
      Da komme ich ganz durcheinander mit den ganzen Variablen...
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • PHP-Quellcode

      1. $query = "SELECT * FROM players WHERE Passwort LIKE '".$password."' LIMIT 1, 1"; // Liest aus der Tabelle alles aus einer Zeile aus wo das Passowrt, $password ist
      2. $username = mysql_real_escape_string($username); // Sonderzeichen aus String "entschärfen" (kP wie ich das sagen soll :D)
      3. $result = mysql_query($query) or die(mysql_error()); // Query ausführen
      4. while($row = mysql_fetch_array($result)){ // Solange eine "Reihe" (Row) exestiert:
      5. $resusername = $row['username']; // $resusername hat den Wert von 'username' in der Tabelle
      6. $respassword = $row['password']; // $respassword hat den Wert von 'password' in der Tabelle
      7. } // Der Block ist abgeschlossen (:D)
      8. if ($respassword == $password) { // Falls Passwort aus der Tabelle, $password ist:
      Alles anzeigen


      Das bedeutet der Code, ob das aber jetzt auch noch funktioniert ist zu bezweifeln :P
    • Okey, mein Login System funktioniert, allerdings nur wenn ich eine festgelegten Salt habe.

      $salt = "abcdefg";

      Nun ist der Salt "abcdefg", aber wenn ich den Salt aus der DB auslesen will, wie ich es vorher gemacht habe, funktioniert das ganze nicht. Dann bekommt mein Code einen andere MD5 Hash raus, als der in der DB.
      Kann es daran liegen das in der DB der Salt auch komische Zeichen wie: drin sind?
    • Wenn solche komischen Zeichen drin sind, stimmt wohl die Kodierung der Tabelle nicht.
      Nimm am besten immer UTF-8 oder so, dann hast du nich so viele Probleme, je nachdem, was für Zeichen dein Salt nutzt.

      Wegen dem o.g Abschnitt, irgendwie stört mich das Query.
      Ich würde eher vorschlagen, sich nur die Datensätze rauszuholen, die halt eben den gleichen Usernamen haben und das gleiche Passwort (Wenn du Salt benutzt, würde ich folgendes Spalten auslesen lassen: Username, Passwordhash, Salt)
    • Wie meinste das mit dem Salt kodieren bevor der mitm PW verbunden wird?
      Der Salt kannste im Klartext speichern, er ist nur ne zusätzliche Sicherheitsstufe, die das Passwort schwerer machen soll.
      Außerdem musste beim Query den Usernamen rausfischen, da das PW ja Salted ist und bevor du nicht den Salt aus der DB hast, um dann das PW Berechnen zu können ums dan mit der DB zu vergleichen, kannste ja nix machen.
    • In der Datenbank hat jeder Account (Name) seinen eigenen Salt. Also hat jede Spalte einen anderen Salt Code. Dieser Salt Code hat wie gesagt, so komische Zeichen, wenn ich nun im PHP Code den Salt+PW in eine MD5 Hash verschlüsseln will, kommt ein andere MD5 Hash raus, als der, der eig. sein müsste. Deshalb muss ich vorher den Salt Code in Buchstaben umwandeln, wie funktioniert das? Oder in einer UTF-8 Kodierung umwandeln.
      Die Datenbank ist nämlich nicht auf meinen PHP Code basiert, sondern auf ein Game, deswegen will ich ein Login System machen, um Ingame Daten auf der Website auslesen zu lassen.
    • Bei dem Salt dürfte es sich eigentlich um eine normale Buchstaben- bzw Zeichenkombination handeln.
      Wenn komische Zeichen drin vorkommen, so ist die Kodierung der Datenbank bzw der Tabelle "falsch", die unterstützt halt eben dieses zeichen nicht (daher mein Ratschlag mit UTF-8)
      Da es sich aber um ein Game handelt, kannst du eher schlecht die Kodierung ändern, da es ja sein kann, dass das Game auf diese Kodierung angewiesen ist oder so.
      Jedenfalls, der Salt wird dem eigentlichen Passwort vor oder nachgestellt und dann wird die daraus erzeugte Kombination gehasht und der Hash in der DB gespeichert.
      Daher brauchst du den Salt eigentlich normalerweise nicht in Buchstaben umwandeln, da er es eigentlich sein sollte (ich kenne keine Methode, wie man anders ein PW salten kann außer mit ner zufälligen und sicheren Buchstaben/Zeichenkombi [die quasi ein zweites Passwort sein könnte, da für den Salt am besten genauso die Regeln angewendet werden, wie für ein sicheres Pwasswort, nur der Salt wird im Klartext gespeichert, da hashen da nich viel bringt (er soll ja nur die Anzahl an Zeichen erhöhen und somit Bruteforce schwerer machen und muss ja zur Hashprüfung genutzt werden können, bei nem Diebstahl der DB nützt der Salt eh wenig, da der Dieb dann die Daten einfach austauschen kann)])
    • Da hast du recht, aber ein Salt ist nicht nur dazu da, um den Hash länger zu machen...

      Es gibt ein sogenannte "Rainbow Table".
      Darin sind tausende und mehr von Passwörtern mit den zugehörigen Hash drin.
      Wenn die DB mal geklaut werden sollte, ist es nicht möglich mit der "Rainbow Table" das Passwort rauszufinden, da ein Salt benutzt worden ist und somit nicht in der Table drin ist.
      Die Hacker haben es nur sehr schwer, das PW raus zu finden, oder es ist gar unmöglich...
      So weit ich weiß müssen sie den Salt Code nehmen, der auch in der DB drin ist, und dann jedes Passwort mit den Salt hashen. Wenn der Hash dann mal korrekt ist, haben sie erst das Passwort, somit wurde es den Hacker sehr schwer gemacht, oder halt unmöglich weil es ja ewig dauern kann.

      Meistens werden die Salts auch nicht mal in der DB gespeichert, dann müssen sie erst einmal den Salt irgendwo her bekommen...
      Bei uns ist es aber in der DB gespeichert.


      Egal, nun wieder zu Thema. Ich werde den Admin mal Fragen, ob es mit der Kodierung sein muss, und es nicht auf UTF-8 geht, dann kann ich ja alles in den Müll schmeißen...
    • Der Salt soll ja den Hash nicht länger machen, das meinte ich ja nicht (zumal das glaub ich garnicht geht, die Hashes sind immer gleich lang oder irre ich mich?)
      Es ist, wie du sagtest, nur ein Schutz gegen Bruteforce bzw RainbowTables.
      Wie gesagt, der Hash kann im Klartext in der DB gespeichert werden, das machen viele Systeme, u.a das WBB (glaube vB auch) und Wordpress müsste das auch tun.
      Wird der MySQL-Zugang geknackt, hilft auch kein Hash mehr, da die Eindringlinge dann ja sowieso die Daten so ändern können wie sie wollen. (Einfach Salt austauschen, neues PW damit hashen und fertig sollte es sein)
      Jedenfalls, ein Salt soll halt die Anzahl der Kombinationen so erhöhen, das es unmöglich ist, das PW zu knacken (zumindest nach heutigem Stand), daher sollte er Salt ja genauso aufgebaut sein, wie ein sicheres Passwort.

      Zum Thema, ich bin mir nicht sicher, aber es kann sein, dass die Kodierung der DB so garnicht mehr geändert werden kann. Falls doch, so müssen sämtliche Daten auch entsprechend kodiert werden (das erledigt dann denke ich die DB Engine selbst, wenn die die Kodierung der DB ändert)
      Jedenfalls, UTF-8 ist nur ein Zeichensatz von vielen, was du noch versuchen könntest, wäre zu schauen, welche Kodierung die DB momentan hat und den Salt dann einfach darauf aufbauen (btw, der Salt wird ja vom Spiel erzeugt oder wie läuft das ab? Normalerweise sollte der Salt ja funktionieren, wenn er entsprechend der Kodierung ordentlich erzeugt wird)
    • Wobei es auch beim Tema Salt wieder enorme unterschiede gibt. Die einen Speichern den Salt direkt mit in der DB die anderen setzten den Salt aus vorhandenen Daten zusammen. Beide wege haben Vor und Nachteile. Ich bevorzuge aber die "verdeckte" zusammensetztung des Salts. Da es somit noch schwerer wird die Passwörter zu knacken. Denn wenn wirklich jemand deine DB hackt, und dann ne spalte in der User Tabelle sieht die Salt heißt, dann denke ich mal auch das er 1und1 zusammen zählen kann ;)
    • Du nimmst halt Daten die schon vorhanden sind, und sich nach möglichkeit nicht ändern. Vorname, Nachname, Geburtsdatum, etc... Je nachdem was du alles hast. Das packste alles in einen String und codierst den als md5 oder sha1 was auch immer. Dadurch das die Daten immer gleich sind (zumindest sollten diese das) kannst du den Salt immer wieder aufs neue erstellen. Er ist einzigartig für jeden User. Das einzigste was du dann noch mach musst ist, den Salt Hash mit deinem PW zu kombinieren und nochmal nen Hash drüber md5 oder sha1 wie du willst.

      Dann haste meiner Ansicht nach das sicherste Passwort überhaupt. Natürlich sobald jemand deinen Code hat, ist es auch wieder was anderes da er sich dann den Algorithmus anschauen kann. Aber in der Regel haben die Hacker den Code ja nicht....
      Und ansonsten ist eh alles verloren :D
    • Ob Salt hinten oder vorne, fest oder dynamisch, einheitlich oder individuell ...
      Im Endeffekt dient er nur dazu, die Passwörter vor riesiegen md5 Archiven/Listen
      zu schützen.

      Es gibt teilweise Datenbanken die über 30Mio Wörter in ihrer DB gespeichert haben,
      es wäre ein leichtes einfach md5 gehashte einträge abzugleichen. Wenn das Passwort
      allerdings mit einem Salt gehasht wurde, ist es schonmal relativ unwahrscheinlich
      das man die Passwörter leicht abgleichen kann.

      Wenn jemand schon zugriff auf deine Datenbank hat, kann er auch über mysql konsole,
      sqlcmd, xp_cmdshell deine Seite so bearbeiten das er die Passwörter sowieso im klartext
      erhält. Das wichtigste ist ein einfacher Salt und eine Clientseitige (Also hier im Browser)
      verschlüsselung der Daten bevor diese überhaupt abgesendet werden.

      Cu