Problem mit Vergleich von GET Übergabe und SQL Übergabe

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

  • Problem mit Vergleich von GET Übergabe und SQL Übergabe

    Hallo,

    ich habe in folgendem Text das Problem, das die Abrage immer false ergibt obwohl durch ein "Echo" beides gleich ist.
    Muss ich die Abfrage anders gestalten? Eine Abfrage via SQL wäre möglich, aber es gibt nur wenige Nutzer in der DB die ein PW haben.

    // Code Anfang //
    PHP-Code:
    require_once('inc/functions.inc.php');
    $name    =    $_GET['name'];
    $pw    =    $_GET['pw'];

    verbindung("av_saegekarten");
    $abfrage     "SELECT * FROM usr WHERE name = '$name'";
    $ergebnis     mssql_query($abfrage);
    while(
    $row     mssql_fetch_object($ergebnis))
        {
            if (
    $pw != $row->pw)
            {
                echo 
    " Hallo, dein Password ist Falsch";
                exit();
            }
            echo 
    "$row->pw = $pw";
            
    setcookie("name""$row->name"time()+(60*60*24*30), "/");
            
    setcookie("kurz""$row->kurz"time()+(60*60*24*30), "/");
            
    setcookie("av""$row->av"time()+(60*60*24*30), "/");
            
    setcookie("konsi""$row->konsi"time()+(60*60*24*30), "/");

            echo 
    " Hallo $row->name. Du wurdest erfolgreich eingeloggt. <br>
                Du wirst gleich weitergeleitet"
    ;
        } 
    // Code Ende //
    Zuletzt geändert von derspoon; 19.06.2008, 13:30.

  • #2
    Zunächst mal http://www.das-dass.de/ dann Regel lesen: http://www.php-resource.de/forum/sho...threadid=50454 dann mach dich schlau über SQL-Injection

    Nun zum Problem:

    1. name ist reserviertes Wort, pack den Spaltennamen in Backsticks
    2. hast du eventuell Leerzeichen im Namen in der DB bzw. bei der Eingabe? Prüfe mal.

    Kommentar


    • #3
      sei doch net so grantig

      Es geht nicht um die Namen, es geht um das Passwaort (pw)

      Wenn ich ein ECHO erstelle sind $pw und $row->pw gleich, aber die Abfrage gibt immer ein true aus.

      Kommentar


      • #4
        Der wichtige Teil des Codes in bunt:
        PHP-Code:
        while($row mssql_fetch_object($ergebnis)) {
            if (
        $pw != $row->pw) {
                echo 
        " Hallo, dein Password ist Falsch";
                exit();
            }
            echo 
        "$row->pw = $pw";
            
        setcookie("name""$row->name"time()+(60*60*24*30), "/");
            
        // weitere setcookie() ...
            
        echo " ... erfolgreich eingeloggt. Du wirst gleich weitergeleitet";

        Lies mal die Stickies in diesem Board, besonders die Passagen zu error_reporting und "cannot modify header information". Dann weißt du, warum deine Debug-Ausgabe vor setcookie() gar schlecht platziert ist.

        Außerdem solltest du dir mssql_error() ausgeben lassen.

        Warum brauchst du eigentlich eine Schleife? Ein Benutzername ist doch hoffentlich eindeutig, d.h. es gibt genau einen oder gar keinen Treffer in der DB.

        Gibt es einen Grund, dass du mit Cookies arbeitest? Was spricht gegen Sessions?

        Last but not least: Passwörter sollten niemals per GET übergeben werden!

        Kommentar


        • #5
          Ähm ... was denn nun entscheide dich, Abfrage true oder false, und wenn Abfrage dann hat sie erstmal nichts mit dem Passwort zu tun, sondern Namen (in Where-Klausel).

          Kommentar


          • #6
            Das echo vor der Cookieeingtragung ist nur derzeit vorhanden um zu prüfen ob $pw = $row->pw ist, das wird wieder gelöscht.

            Es gibt nur einen Eintrag zu jeder Person das stimmt. Wie kann ich das anders lösen? Btw. welchen Code müßte ich setzten um zu prüfen, das das Passwort ($pw) = dem DB Passwort ist ?

            True ^^

            Es geht eigentlich nur darum, dass die Abfrage

            PHP-Code:
                    if ($pw != $row->pw)
                    {
                        echo 
            " Hallo, dein Password ist Falsch";
                        exit();
                    } 
            Immer TRUE zutrifft, auch wenn das Passwort ($pw) mit dem DB passwort übereinstimmt.

            Against Sessions
            Ich hab keine Ahnung von Sessions. Es handelt sich auch nur um eine kleine Intranetseite, die also nicht mit dem Internet in Verbindung gebracht wird. Daher spielt sicherheit dort ein kleine Rolle. Ist bisher auch nur in der Programmierung, aber ich werde das PW via POSt übergeben.
            Zuletzt geändert von derspoon; 19.06.2008, 14:50.

            Kommentar


            • #7
              Original geschrieben von derspoon
              Es gibt nur einen Eintrag zu jeder Person das stimmt. Wie kann ich das anders lösen? Btw. welchen Code müßte ich setzten um zu prüfen, das das Passwort ($pw) = dem DB Passwort ist ?
              PHP-Code:
              $sql "SELECT 1 FROM usr WHERE usr.name = '".$_POST['name']."'"
                     
              ." AND pw = MD5('".$_POST['pw']."')";
              $res mssql_query($sql) or die(mssql_error());
              $access = (mssql_num_rows($res) == 1); 
              MD5 soll ein Wink mit dem Zaunpfahl sein.
              Zuletzt geändert von onemorenerd; 19.06.2008, 14:22.

              Kommentar


              • #8
                Die while Schleife nach dem select ist überflüssig, da die Abfrage in der Regel nur einen Datensatz liefern sollte, evtl. prüfen mit mysql_num_rows().
                Deine "Überprüfung"
                Code:
                echo "$row->pw = $pw";
                ist keine, sondern eine Zuweisung. Und (wurde schon gefragt), hast du evtl. Leerzeichen in der DB oder in dem per GET übermittelten pw?
                Wilfried
                Die Macht der Presse spüren vor allem die Weintrauben.

                Kommentar


                • #9
                  Original geschrieben von asp2php
                  1. name ist reserviertes Wort, pack den Spaltennamen in Backsticks[/B]
                  Backticks in MSSQL?
                  Gruss
                  H2O

                  Kommentar


                  • #10
                    Original geschrieben von wshbg
                    Deine "Überprüfung"
                    Code:
                    echo "$row->pw = $pw";
                    ist keine, sondern eine Zuweisung.
                    Wo siehst du so etwas?
                    Gruss
                    H2O

                    Kommentar


                    • #11
                      Das echo ist ja auch nicht die Abfrage, sondern die if abfrage ergibt immer true bzw. stimmt immer obwohl das PW richtig ist.

                      In der Datenbank ist in der PW Spalte kein Leerzeichen, ich habe nur 15 Zeichen zulässig und ein PW mit 6 Zeichen, aber das sollte ja kein Problem darstellen.

                      Ich habe das gleiche Problem aber auch bei anderen Vergleichen von Variablen und Datenbankausgaben. Ich verstehe den Fehler nicht, da ich über ein Echo den Wert der Variablen und der DBAusgabe immer prüfen und meine Abfrage sollte funktionieren.

                      Echo " $pw = $row->pw " ergibt 123456 = 123456

                      Kommentar


                      • #12
                        Original geschrieben von H2O
                        Backticks in MSSQL?
                        Habe anfangs nicht genau hin geguckt für MSSQL natürlich []

                        Kommentar


                        • #13
                          Original geschrieben von derspoon

                          Es geht eigentlich nur darum, dass die Abfrage

                          PHP-Code:
                                  if ($pw != $row->pw)
                                  {
                                      echo 
                          " Hallo, dein Password ist Falsch";
                                      exit();
                                  } 
                          Immer False zutrifft, auch wenn das Passwort ($pw) mit dem DB passwort übereinstimmt.
                          Natürlich ist sie false, wenn die Passwörter übereinstimmen, was willst du noch

                          Kommentar


                          • #14
                            hab doch schon geschrieben, das sie TRUE ist ^^

                            Also egal ob ich das Richtige PW oder das Falsche eintragen, jedesmal kommt der Satz.

                            Ich hab das gleiche Problem wenn ich eine Variable mit einer DBVariable vergleiche, es stimmt nie überein.

                            Über ein ECHO sehe ich aber das beide Variablen übereinstimmen.

                            Kommentar


                            • #15
                              Original geschrieben von derspoon
                              Echo " $pw = $row->pw " ergibt 123456 = 123456
                              Was ergibt
                              PHP-Code:
                              echo ":$pw::$row->pw:"
                              ?
                              Gruss
                              H2O

                              Kommentar

                              Lädt...
                              X