Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Datenbank durchsuchen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Datenbank durchsuchen

    Hey,

    ich möchte die Datenbank nach einem User durchsuchen und das Passwort dieses users rauspicken um es dann mit der eingabe des users zu vergleichen (ganz normaler login nur halt ohne die ganzen sicherheitsaspekte) und habe dazu folgendes:

    PHP-Code:
    $sql 'SELECT passwort FROM user WHERE username = $usrname'
    heisst doch

    "nimm das was im PASSWORT steht aus der tabelle USER und zwar dort wo $username in USERNAME steht"

    oder täusche ich mich?


  • #2
    Ja, stimmt.

    Aber du solltest einfache Anführungszeichen nehmen und den Benutzernamen escapen. Es sei denn du kannst garantieren, dass der Username niemals escaped werden muss.

    Probleme kann es geben, wenn das Feld username eine Kollation wie "utf8_general_ci" verwendet - also ohne Beachtung der Groß- und Kleinschreibung.

    z.B. wenn die Benutzer "ALPHA", "alpha" und "ALpha" existieren, dann findet "WHERE `username` = 'alPHA'" alle drei Benutzer.

    Man könnte das auch als Sicherheitsrisiko sehen, weil man nicht mehr den genauen Loginnamen kennen muss (Kleinschreibung reicht). So kann man den Loginnamen leichter erraten. Das gilt natürlich nur für Loginsysteme wo Loginname und Benutzername getrennt sind.

    Verhindern kann man das indem man "utf8_bin" verwendet. kA obs da auch ne andere Möglichkeit gibt. Bitte um Aufklärung.

    Kommentar


    • #3
      Mhm, ob man escapen muss weiss ich garnicht. es sollten eigentlich keine zeichen drin vorkommen die nicht drin sein sollten oder? ich mein, man registriert sich z.b. mit admin und wenn man nach admin sucht sind da ja keine sonderzeichen drin.

      Aber noch ne andere Frage:

      wie bekomme ich es hin das

      $sql = 'SELECT passwort FROM user WHERE username = $usrname';

      auch in einer variablen steht?

      im Moment steht in $sql folgendes:

      SELECT passwort FROM user WHERE username = $usrname

      da soll aber der inhalt der Zelle stehen und nicht das was in den anführungszeichen steht

      Kommentar


      • #4
        um es verständlicher zu machen ich habe folgendes

        PHP-Code:
        $pw $_post["pwd"];
        $username $_post["username"];
        $sql 'SELECT passwort FROM user WHERE username = $usrname';
                
                if (
        $pw == $sql
                {
                        echo 
        "Alles ok";

                }else{
                            
                    echo 
        "Login Daten falsch";
                } 

        Kommentar


        • #5
          Du musst ins Where auch noch das PW packen!

          Schau mal hier: PHP: mysql_query - Manual

          Kommentar


          • #6
            Zitat von Jens P. Beitrag anzeigen
            Du musst ins Where auch noch das PW packen!

            Schau mal hier: PHP: mysql_query - Manual
            Wieso muss er das ? Wenn jeder Username nur einmal vorkommt ist der Bezeichner für die Zeile doch eindeutig, und aus der Zeile selektiert er die Spalte Passwort. Evt ist es noch zu früh und ich steh aufm Schlauch aber erscheint mir grad logisch.

            Btw wieso steht im Query denn $usrname und mit post befüllst du $username?:
            PHP-Code:
            $pw $_post["pwd"]; 
            $username $_post["username"]; 
            $sql 'SELECT passwort FROM user WHERE username = $usrname'
            Wohl nur vertippt aber falls du es übersehen hast könnts daran liegen das es nicht geht.
            In deinem Codeausschnitt fehlt auch noch das Query ansich du befüllst nur $sql mit einem String. Also sowas wie
            PHP-Code:
            $result $db->query($sql
            bei mysqli.

            Kommentar


            • #7
              Er muss lediglich anstatt einfachen Anführungszeichen doppelte verwenden, sonst bleibt im String immer $username stehen (und nicht der Inhalt von $username).

              PHP-Code:
              $sql "SELECT passwort FROM user WHERE username = '$username' ";
              // oder
              $sql 'SELECT passwort FROM user WHERE username = \'' $username .'\''
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Zitat von XCT Beitrag anzeigen
                Wieso muss er das ? Wenn jeder Username nur einmal vorkommt ist der Bezeichner für die Zeile doch eindeutig, und aus der Zeile selektiert er die Spalte Passwort. Evt ist es noch zu früh und ich steh aufm Schlauch aber erscheint mir grad logisch.
                UPS :P Tut mir leid. Hast völlig recht. Er macht ja ein "SELECT passwort..".

                Kommentar


                • #9
                  Danke schonmal für die vielen Antworten ich habs nun so:

                  PHP-Code:
                  $sql "SELECT passwort FROM user WHERE username = '$usrname' ";
                  $result $db->query($sql);

                   if (
                  $pw == $result)  
                          { 
                                  echo 
                  "Alles ok"

                          }else{ 
                                       
                              echo 
                  "Login Daten falsch"
                          } 

                  Nun kommt aber ein Fehler in line : $result = $db->query($sql);

                  Was ja auch logisch ist ich habe in $db nichts stehen, was muss denn da rein? der Tabellenname? oder der Datenbankname?

                  Kommentar


                  • #10
                    PHP-Code:
                    $result mysql_query($sql); 
                    $db wird bei XCT vermutlich eine Instanz (s)einer Datenbank Klasse sein^^ Aber er hat nicht umsonst geschrieben "sowas wie", nicht immer C&P'n sondern auch lesen

                    Kommentar


                    • #11
                      Ok das nun auch geändert, und jetzt, wo ich eigentlich erwarte, dass das passwort in der Variablen $result steht, habe ich mir die Variable durch nen Alert mal ausgeben lassen und in $result steht Resource id #4

                      Warum? muss ich nun noch mehr machen damit ich das passwort von dem user weiss?

                      Kommentar


                      • #12
                        [MAN]mysql_fetch_array[/MAN] oder [MAN]mysql_fetch_object[/MAN]

                        Kommentar


                        • #13
                          jaaaaaaaaaaaaaaa es funktioniert vielen vielen Dank^^

                          hier nocheinmal der funktionierende code, falls nochmal jemand so eine Frage hat:

                          PHP-Code:
                          $sql "SELECT passwort FROM user WHERE username = '$usrname' ";
                          $result mysql_query($sql);
                          $row mysql_fetch_array($result);
                          echo 
                          $row[0]; 

                          Nun steht in $row[0]; das Passwort

                          Kommentar

                          Lädt...
                          X