Ankündigung

Einklappen
Keine Ankündigung bisher.

MD5 für Passwörter

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MD5 für Passwörter

    Servus alle zusammen,

    hab mal eine Frage bezüglich der MD5 eintragung von Passwörtern in eine mysql datenbank per php.

    1. Wie genau muss der SQL befehl beim erstellen der Datenbank lauten? Ich habe char(32) gesetzt bei Password weil cihd as so irgendwoe mal gelesen hatte, jedoch steht wenn ich per phpmyadmin gucke die Spalte password automatisch auf varchar(32) statt auf char(32). Macht das eigentlich einen unterscheid? Und wenn nicht, weiso gibts dann beides?

    2. Wie genau muss ein beispiel MySQL query aussehen damit der Eintrag auch MD komprimiert eingetragen wird? Ich hab in phpmyadmin mal die spalte password auf md5 gesetzt und dann per php-skript einen datensatz hinzugefügt. Das PW wurde jedoch ganz normal eingtragen statt als 32 zeichen string komprimiert. Ich konnte also das PW ganz normal auslesen, doch genau das soll ja verhindert werden.

    kann mir da evtl jemand 2 beispielcodezeilen geben für meine 2 Fragen? Das wäre super nett, danke im vorraus und eine schöne Advenszeit noch.
    .visit » Tolga-Tanik.de
    .visit » TolgaTanikFoto @ Facebook
    .visit » Tolga Tanik Fotografie @ YouTube


  • #2
    Also ich mache die md5-Verschlüsselung immer mit der PHP-Funktion PHP: md5 - Manual.

    Der Unterschied zwischen char und varchar kann man eigentlich schon aus dem Namen lesen: varchar steht für variable character. Um den Unterschied zu verdeutlichen ein Beispiel:

    Wir haben eine Tabelle mit 2 Feldern:
    1. Feld vom Typ char(32)
    2. Feld vom Typ varchar(32)

    Jetzt speichern wir in beide Felder den String "Hallo Welt", der nur aus 10 Buchstaben besteht und somit nur 10 Bytes Platz benötigt.
    Im char-Feld wird der String aber mit 32 Bytes abgespeichert, da das Feld mit Länge 32 definiert wurde. Ob da einfach noch Müll angehängt wird, der beim Auslesen wieder verschwindet, oder wie das genau gemacht wird, weiss ich nicht. Im varchar-Feld wird der String nur mit 10 Bytes abgespeichert und die restlichen 22 verfügbaren Byte werden ignoriert.

    => Grundsätzlich ist varchar vorzuziehen, da es wirklich nur soviel Platz beansprucht wie nötig. Da ein md5-Hash aber immer genau 32 Bytes lang ist, kommt es in diesem Fall nicht drauf an.

    Kommentar


    • #3
      Danke für die hilfreichen Informationen. Doch ich bräuchte wenns geht mal 2 Syntaxbeispiele um das ganze richtig zu benutzen. ich zeig mal kurz was ich geschrieben habe.


      So sieht mein Eintrag in die DB aus welche ich dann mit mysql query abschicke:
      Code:
      $adduserreg= "INSERT INTO users
      (Nick,
      Email,
      Password)
      VALUES
      ('$nick',
      '$mail',
      '$gennewpw');";
      Und so habe ich die Datenbank per phpmyadmin erstellt:
      Code:
      CREATE TABLE users (
      ID TINYINT AUTO_INCREMENT PRIMARY KEY,
      Name VARCHAR(20),
      Password CHAR(32),
      Email VARCHAR(60)
      );
      .visit » Tolga-Tanik.de
      .visit » TolgaTanikFoto @ Facebook
      .visit » Tolga Tanik Fotografie @ YouTube

      Kommentar


      • #4
        Zitat von TeazY Beitrag anzeigen
        2. Wie genau muss ein beispiel MySQL query aussehen damit der Eintrag auch MD komprimiert eingetragen wird? Ich hab in phpmyadmin mal die spalte password auf md5 gesetzt und dann per php-skript einen datensatz hinzugefügt. Das PW wurde jedoch ganz normal eingtragen statt als 32 zeichen string komprimiert. Ich konnte also das PW ganz normal auslesen, doch genau das soll ja verhindert werden.
        Das md5, was du im PMA einstellen kannst ist nur ein MySQL Funktionsaufruf bei deiner aktuellen Einfüge Aktion.
        Code:
        SELECT .. FROM .. WHERE `pw` = MD5('string')
         
        INSERT INTO ... (... `pw`) VALUES (.... MD5('pw'))

        Kommentar


        • #5
          Also müsste ich (um oben genanntest beispiel nochmal aufzugreifen) einfach meinen befehl um md5 erweitern sodass der code dann wie folgt aussieht:

          Code:
          $adduserreg= "INSERT INTO users
          (Nick,
          Email,
          Password)
          VALUES
          ('$nick',
          '$mail',
          md5('$gennewpw'));";
          Und diese variable dann per mysql qry an die datenbank senden. und dann sollte das PW auch md komprimiert eingtragen werde, richtig? Ich werde das jetzt gleich mal ausprobieren und hoffe das es funktioniert.

          /Edit: habs gerade probiert und es funktioniert. Vielen Dank!
          .visit » Tolga-Tanik.de
          .visit » TolgaTanikFoto @ Facebook
          .visit » Tolga Tanik Fotografie @ YouTube

          Kommentar


          • #6
            Bitte denke daran, dass du die anderen Variablen noch escapest:
            PHP-Code:
            mysql_real_escape_string($nick); 
            Edit:
            Warum?
            -> SQL-Injektion - Wikipedia
            “Real Programmers don’t comment their code. If it was hard to write, it should be hard to read.”

            Kommentar


            • #7
              Was bedeutet das? Kannst du mir das erklären bitteß Das kenn ich noch nicht.
              .visit » Tolga-Tanik.de
              .visit » TolgaTanikFoto @ Facebook
              .visit » Tolga Tanik Fotografie @ YouTube

              Kommentar


              • #8
                Siehe meinen Nachtrag.
                “Real Programmers don’t comment their code. If it was hard to write, it should be hard to read.”

                Kommentar


                • #9
                  Ok, das ist ein wichtiger und sehr netter hinweis. Wenn cih das richtig verstehe gitl das aber nur dort wo daten an die Db gesendet werden die user eingegeben haben, richtig? Das heisst ich müsste meine oben genannte DB selection wie folgt abändern:

                  Code:
                  $adduserreg= "INSERT INTO users
                  (Nick,
                  Email,
                  Password)
                  VALUES
                  ('mysql_real_escape_string($nick)',
                  'mysql_real_escape_string($mail)',
                  md5('$gennewpw'));";
                  richtig?
                  .visit » Tolga-Tanik.de
                  .visit » TolgaTanikFoto @ Facebook
                  .visit » Tolga Tanik Fotografie @ YouTube

                  Kommentar


                  • #10
                    falsch
                    mysql_real_escape_string() ist eine PHP Funktion

                    Kommentar


                    • #11
                      Das heisst ich muss die variablen escapen bevor ich sie im SELECT befehl verwende?

                      Würde es denn so funktionieren:

                      Code:
                      $nick= mysql_real_escape_string($_POST['nick']);
                      $mail= mysql_real_escape_string($_POST['email']);
                       
                      $adduserreg= "INSERT INTO users
                      (Nick,
                      Email,
                      Password)
                      VALUES
                      ('mysql_real_escape_string($nick)',
                      'mysql_real_escape_string($mail)',
                      md5('$gennewpw'));";
                      
                      .visit » Tolga-Tanik.de
                      .visit » TolgaTanikFoto @ Facebook
                      .visit » Tolga Tanik Fotografie @ YouTube

                      Kommentar


                      • #12
                        wenn $nick = TeazY würde in die DB eingefügt werden: mysql_real_escape_string(TeazY)

                        Kommentar


                        • #13
                          Neuer Versuch:

                          Code:
                          $nick= mysql_real_escape_string($_POST['nick']);
                          $mail= mysql_real_escape_string($_POST['email']);
                           
                          $adduserreg= "INSERT INTO users
                          (Nick,
                          Email,
                          Password)
                          VALUES
                          ('$nick',
                          '$mail',
                          md5('$gennewpw'));";
                          .visit » Tolga-Tanik.de
                          .visit » TolgaTanikFoto @ Facebook
                          .visit » Tolga Tanik Fotografie @ YouTube

                          Kommentar


                          • #14
                            PHP-Code:
                            // * durch passende Werte ersetzen
                            $mysql mysql_connect(*,*,*) or exit(mysql_error());
                            mysql_select_db(*, $mysq) or exit(mysql_error($mysql));

                            $nickmysql_real_escape_string($_POST['nick'], $mysql);
                            $mailmysql_real_escape_string($_POST['email'], $mysql);
                            $pw md5($gennewpw);

                            $adduserreg "INSERT INTO `users`
                             (`Nick`,`Email`,`Password`)
                            VALUES
                             ('
                            $nick','$mail','$pw')";
                            mysql_query($adduserreg$mysql) or exit(mysql_error($mysql)); 

                            Kommentar


                            • #15
                              Dies schützt dich vor MySQL-Injektionen, wichtig auch auch, dass du dich um sonstige Usereingaben kümmerst, denn es wäre leichtsinnig Usereingaben zu trauen.

                              Bevor du Usereingaben ausgibst solltest du diese wie folgt behandeln:
                              PHP-Code:
                              htmlentities(strip_tags($benutzereingabe), ENT_QUOTES
                              Dies schützt dich vor XSS-Angriffen.



                              Gruß: elzumo

                              Edit:
                              Sehr schönes Buch zum Thema, das ich jedem wärmstens empfehlen kann: PHP-Sicherheit
                              “Real Programmers don’t comment their code. If it was hard to write, it should be hard to read.”

                              Kommentar

                              Lädt...
                              X