ronny: warum prüft der mein passwort nicht?

hallo, folgendes script nutze ich für einen login

<?PHP
session_start();

$usr = $eingabe_name;
      $pass = $eingabe_pass;
      $md_pass = md5($pass);

require("db.php");

$SQL = "SELECT usr_name FROM Einloggen WHERE usr_name = '$usr' and passwort = '$md_pass'";
      $abfrage = mysql_query($SQL);

if(mysql_num_rows($abfrage) == 1) {

//benutzername erhalten
         $_SESSION["txt_usr"] = $txt_usr;
         //login ermöglichen
         $login = 1;
         $_SESSION["login"] = $login;

} else {

//platz für evtl. verarbeitungen

}

mysql_close();

?>

zum überprüfen intern nutze ich das dann so

<?php
session_start();

if (!isset($_SESSION['login'])) {
// Variable nicht registriert

session_destroy();

@header("Location:index.php");

exit;
}

?>

aber warum kann ich mich mit einem x-beliebigen passwort einloggen?

die abfrage sollte doch stimmen?

oder?

danke

ronny

  1. Hello,

    mir scheint des Rätsels Lösung ganz woanders zu stecken...

    Hast Du Deinen Browser auf "redselig" eingestellt. Zum Testen derartiger Scripte ist das unumgänglich.

    Grüße

    Tom

    1. hi,

      Hast Du Deinen Browser auf "redselig" eingestellt. Zum Testen derartiger Scripte ist das unumgänglich.

      nee, habe ich nicht, da ich generell ohne kekse arbeiten möchte. und da sessions und kekse noch neuland für mich sind, habe ich mal alles dicht gemacht, damit auch wirklich ohne kekse alles funktioniert.

      wie sollte ich denn nun vorgehen?

      danke

      ronny

      1. hi,

        das ist auch nicht die lösung :(

        ronny

      2. Hello,

        Hast Du Deinen Browser auf "redselig" eingestellt. Zum Testen derartiger Scripte ist das unumgänglich.

        nee, habe ich nicht, da ich generell ohne kekse arbeiten möchte. und da sessions und kekse noch neuland für mich sind, habe ich mal alles dicht gemacht, damit auch wirklich ohne kekse alles funktioniert.

        Das hoab i mi denkt...

        Also: "Cookies annehmen nach Rückfrage" einschalten, beide Arten.
        In der PHP-Ini nachschauen, wie die Session-Einstellungen sind und der Einfahheit halber hier posten.

        Beim Testen daran denken, dass Cookies erhalten bleiben können und Credentials (Auth401 -> User:Password) immer bis zum Schließen állere Browserintanzen überleben (können).

        Also öfter mal Browser schließen.

        Dann während der Testphase immer Session-ID im Script anzeigen lassen

        echo "Session-ID: ".session_id()."<br />;
        echo "Neue Session unter: ".SID."<br />";

        echo "<pre>";
        print_r($_SESSION);
        echo "</pre>";

        Das sollte Dir Aufschluss geben.

        Viel Erfolg

        Tom

        1. hi,

          Beim Testen daran denken, dass Cookies erhalten bleiben können und Credentials (Auth401 -> User:Password) immer bis zum Schließen állere Browserintanzen überleben (können).

          na das ist ja mein problem, ich komme quasi auch ohne passwort rein ( 1.fehler )
          d.h. der interne bereich wird angezeigt, dort werden zwar keine daten angezeigt, aber eigentlich sollte es ja schwupps wieder auf die index gehen ( siehe login prüfen )

          und dann komme ich mit jedem pw rein

          name: ronny
          pw: soeinmüll

          so stehts aber in der db

          name: ronny
          pw: ronny

          Also öfter mal Browser schließen.

          mach ich bei jedem test neu ;)

          echo "Session-ID: ".session_id()."<br />;
          echo "Neue Session unter: ".SID."<br />";

          echo "<pre>";
          print_r($_SESSION);
          echo "</pre>";

          session funktionieren. alles da, alles gleich, wenn name falsch, dann gibts auch keine session :(

          ich werd noch blöd....

          danke
          ronny

        2. hi,

          echo "Session-ID: ".session_id()."<br />;
          echo "Neue Session unter: ".SID."<br />";

          echo "<pre>";
          print_r($_SESSION);
          echo "</pre>";

          so, das sagt er mir

          Session-ID: 33fc8d58e8fa148b70dacfe4068c1cbf
          Neue Session unter:

          Array
          (
              [session_id] => 33fc8d58e8fa148b70dacfe4068c1cbf
              [login] => 1
              [nochandererkram]

          )

          sollte also funzen..

          ronny

          1. Hello,

            so, das sagt er mir

            Session-ID: 33fc8d58e8fa148b70dacfe4068c1cbf
            Neue Session unter:

            Array
            (
                [session_id] => 33fc8d58e8fa148b70dacfe4068c1cbf
                [login] => 1
                [nochandererkram]

            )

            Fein, und wenn Du die Session nun zerstörst mit session_destroy(), dann hat Dein Client ja immer noch den Cookie von der Session (wenn Du mit Cookies arbeitest). Die Session wird dann ggf. unter der selben Nummer wieder aufgemacht beim nächsten Click, aber die Variablen müssten weg sein.

            Ich hatte hier mal ein paar Session-Testscripte reingestellt. Must Du mal im Archiv unter "Session" "Test" "Script" "Tom" suchen. Und Sven hatte noch was dazu geschrieben Da müssten die Zusammenhänge dann klar werden.

            Aber ich denke, Dein Fehler steckt in der merkwürdigen Logik mit der DB-Abfrage. Der md5()-Wert von einem Leeren Feld ist wohl immer der gleiche. Und wenn Du den in die DB eingetragen hast, dann steht da ein Datensatz mit Username = "" und Passwort = md5("") drin.

            Und wenn Du nun noch

            die $_POST ausgeben lässt, genauso wie Du es mit den $_SESSION jetzt gemacht hast, geht Dir vielleicht ein Licht auf. Ist nur 'ne Idee...

            Grüße

            Tom

            1. hi,

              Fein, und wenn Du die Session nun zerstörst mit session_destroy(), dann hat Dein Client ja immer noch den Cookie von der Session (wenn Du mit Cookies arbeitest). Die Session wird dann ggf. unter der selben Nummer wieder aufgemacht beim nächsten Click, aber die Variablen müssten weg sein.

              stimmt, variablen sind weg, aber auch neue session.

              Ich hatte hier mal ein paar Session-Testscripte reingestellt. Must Du mal im Archiv unter "Session" "Test" "Script" "Tom" suchen.

              *im archiv wühl* ;)

              Aber ich denke, Dein Fehler steckt in der merkwürdigen Logik mit der DB-Abfrage.

              wie meinst du das genau?

              Der md5()-Wert von einem Leeren Feld ist wohl immer der gleiche. Und wenn Du den in die DB eingetragen hast, dann steht da ein Datensatz mit Username = "" und Passwort = md5("") drin.

              gibt nur einen benutzer in dieser datenbank ( testdb )

              name: ronny
              pw: ronny

              Und wenn Du nun noch
              die $_POST ausgeben lässt, genauso wie Du es mit den $_SESSION jetzt gemacht hast, geht Dir vielleicht ein Licht auf. Ist nur 'ne Idee...

              bringt mich auch nicht weiter, kommt alles so wie es soll.

              danke

              ronny

              1. Hello,

                bringt mich auch nicht weiter, kommt alles so wie es soll.

                aber diese Frage hast Du noch nicht beantwortet:

                Hello Ronny,

                $usr = $eingabe_name;
                      $pass = $eingabe_pass;
                      $md_pass = md5($pass);

                Woher kommen die?

                require("db.php");

                Was steht da drin?

                Grüße

                Tom

                1. $usr = $eingabe_name;
                        $pass = $eingabe_pass;
                        $md_pass = md5($pass);

                  Woher kommen die?

                  aus dem loginfeld, angezeigt auf der seite nach dem login ( hier wird der login überprüft ) mit deiner $_POST variante

                  Array
                  (
                      [txt_usr] => ronny
                      [txt_pass] => müll ( obwohl passwort ronny ;) )
                  )

                  require("db.php");

                  Was steht da drin?

                  nur der server,user,pass kram und
                  $conn = mysql_connect($db_server,$db_username,$db_passwort)or die ("Verbindungsabbruch");
                  mysql_select_db($db_database)or die ("Datenbankauswahl fehlerhaft");

                  naja, wie gesagt, der login klappt, alle daten die ich haben will werden nach dem login abgeholt, aber passwort ist meinem script scheinbar egal ;) und wenn ich mich mit einem unbekannten user einlogge, dann komme ich auch auf die interne seite, aber es wird dort eben nichts getan, obwohl ja eigentlich ne header["location"] sache passieren sollte.

                  danke

                  ronny

                  1. Hello Ronny,

                    $usr = $eingabe_name;
                          $pass = $eingabe_pass;
                          $md_pass = md5($pass);

                    Woher kommen die?

                    aus dem loginfeld, angezeigt auf der seite nach dem login ( hier wird der login überprüft ) mit deiner $_POST variante

                    Array
                    (
                        [txt_usr] => ronny
                        [txt_pass] => müll ( obwohl passwort ronny ;) )
                    )

                    Das wird ja ne unendliche Geschichte. Da kann doch nur irgendwo ein Schreibfehler sein oder Dein Browser steht auf automatischer Formularunterstützung ohne Nachfrage...

                    Letzter Versuch:
                    Poste mal den relevanten Ausschnitt aus dem Anmeldeformular.

                    Grüße

                    Tom

                    1. hi,

                      Das wird ja ne unendliche Geschichte.

                      ich glaub auch ;)

                      Da kann doch nur irgendwo ein Schreibfehler sein

                      war auch grad mein gedanke beim rauchen
                      , aber finde nix

                      Letzter Versuch:
                      Poste mal den relevanten Ausschnitt aus dem Anmeldeformular.

                      <form action="test.php" method="Post">
                        <div align="center"><br>
                          <br>
                          <br>
                          <table border=0>
                            <tr>
                              <td align="center" valign="top"> <p align="justify"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif">
                                  <input type="text" name="txt_usr" size="8" maxlength="20">
                                  <br>
                                  <font color="#CC0033">Name </font></font></p></td>
                            </tr>
                            <tr>
                              <td align="center" valign="top"> <div align="justify"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">
                                  <input type="Password" name="txt_pass" size="8" maxlength="20">
                                  <br>
                                  <font color="#CC0033">Passwort </font></font></div></td>
                            </tr>
                          </table>
                          <input type="submit" value="LogIn">
                        </div>
                      </form>

                      ähm, ja ich weiß..font usw ;)

                      danke

                      ronny

                      1. Hello Ronny,

                        Poste mal den relevanten Ausschnitt aus dem Anmeldeformular.

                        ^ so sagte ich es, und das ist relevant: v

                        <form action="formresponder.php" method="Post">
                          <input type="text" name="txt_usr" size="8" maxlength="20">
                          <input type="Password" name="txt_pass" size="8" maxlength="20">
                          <input type="submit" value="LogIn">
                        </form>

                        Dem Button fehlt ein Name. Aber das ist ja hier nicht wichtig.

                        Funktioniert einwandfrei.
                        Getestet mit meinem "Wunderscript" formresponder.php.
                        Ich hatte da schon so einen Verdacht, dass type="Password" vielleicht einen enctype brauchen würde. Man weiß ja nie so genau...

                        Der Fehler kann also nur in Deinem "test.php" liegen, dass aus der $_POST der Wert nicht ordentlich ausgelesen wird. Diese Umkopierere ist auch nicht notwendig. Man kann das POST-Array einer Sicherheitsbehandlung unterziehen mit Array_Map() und den gewünschten Kastrationen und dann im ganzen Script verwenden.

                        Viele hier scheinen noch nie speicherkritische Scripte gehabt zu haben.

                        Grüße

                        Tom

                        1. hi,

                          Der Fehler kann also nur in Deinem "test.php" liegen, dass aus der $_POST der Wert nicht ordentlich ausgelesen wird.

                          jut, dann werd ich mir zum hundertsten mal das ding vornehmen ;)

                          dank dir erstmal

                          ciao

                          ronny

                        2. hi,

                          also habe mein script neugeschrieben, aber in einer anderen form. arbeite nicht mehr mit zwei dateien für den login sondern mit einer ( wie nennt man das? --> affenscript oder so, war es das? )

                          ich denke mal, das ganze war einfach ein problem mit dem sessionhandling und falscher variablenzuweisung oder sonst solch kram. fehler habe ich generell keinen gefunden.

                          ich könnte mein neues script hier posten, wenn du willst mach ich es, aber ich denke mal, du hast solch teile schon öfter gesehen ;)

                          danke

                          greetz

                          ronny

  2. Hello Ronny,

    $usr = $eingabe_name;
          $pass = $eingabe_pass;
          $md_pass = md5($pass);

    Woher kommen die?

    require("db.php");

    Was steht da drin?

    Grüße

    Tom