Probleme bei Login-Script

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

  • Probleme bei Login-Script

    Hi Leute!

    Habe da ein Problem mit meinem Login-Script.

    Also der Login, sowie der Logout funktionieren. Selbst der Seitenschutz, also das man auf die gesicherten Seiten ohne Login nicht zugreifen kann funktioniert, aber irgendwie bekomme ich es nicht hin, das wenn ein User nicht registriert ist oder falsche Angaben gemacht hat eine Fehlermeldung per 'echo' auszugeben.

    Zur Information, das Login-Formular leitet direkt auf die sichere Seite. Im Quelltext der sicheren Seite wird zu allererst die DB-Connection inkludiert und anschließend die login.php.
    Innerhalb der login.php wird das Formular ausgewertet.

    Hier mal der Quelltext der meiner Index.php

    Code:
    <?php
     if (!isset($_SESSION)) {
      session_start();
     }
     
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "[URL]http://www.w3.org/TR/html4/loose.dtd[/URL]">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Sass-Content</title>
    <link href="sc/dateien/sc_standard.css" rel="stylesheet" type="text/css">
    <link href="sc/dateien/sc_login.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <?php  
     ?>
    <div id="Layer1">
    <div id="Layer2">
    <div id="Layer3">
    <form name="login" method="post" action="sass-content.php" >
    <input name="benutzer" type="text" tabindex="0" value="Benutzer" onFocus= (value="")>
    <input name="pass" type="password" value="Passwort" onFocus=(value="")>
    <input name="login_btn" type="submit" class="btn" value="Login">
    </form>
    </div>
    <div id="Layer4">
     <?php
      if (isset($log)) {
        echo 'Login inkorrekt!';
       }
      if (isset($meldung) ) {
        echo 'Bitte anmelden';
       }
      if (isset($logout)) {
       echo 'Sie haben sich erfolgreich abgemeldet!';
       session_destroy();
      }
    ?>
     </div>
      </div>
    </div>
    </body>
    </html>
    Und hier der Quelltext der login.php:

    Code:
    <?php
     //Session starten. (ACHTUNG! Muss vor allem anderen stehen, sonst gibt's eine Fehlermeldung!)
     if (!isset($_SESSION)) {
      session_start();
     }
     
     //Übergebener POST-Inhalt wird in Variablen geschrieben.
     $benutzer = $_POST['benutzer'];
     $pass = $_POST['pass'];
     
     //Wenn $benutzer existiert, wird geprüft ob ein Ergebnis vorliegt.
     if(isset ($benutzer)) {
      $login = "select benutzer from login where benutzer='".$benutzer."' and
     passwort='".$pass."'";
      $result = mysql_query($login) or die(mysql_error());
     
     //Sollte kein Ergebnis vorliegen, wird zum Login-Formular weitergeleitet und eine 
    Fehlermeldung ausgegeben.
     if(!($row = mysql_fetch_row($result))) {
      header("Location: index.php?log=1");
     }else{
      //Liegt ein Ergebnis vor, werden die Daten in die Session geschrieben.
      $_SESSION['angemeldet'] = "ja";
      $sclogin = "select vorname, nachname from benutzer where benutzername ='".$benutzer."' 
    and passwort ='".$pass."'";
      $scresult = mysql_query($sclogin) or die(mysql_error());
     
      $user = mysql_fetch_assoc($scresult);
      $_SESSION['vorname'] = $user['vorname'];
      $_SESSION['nachname'] = $user['nachname'];
     }
     }else {
       //Weiterleitung zum Anmeldeformular
       header("Location: index.php?meldung=1");
      }
    ?>
    Zuletzt geändert von deisi; 12.04.2010, 22:28.

  • #2
    Hallo,

    dein Login ist nicht gegen SQL-Injections abgesichert und ist auf register_globals angewiesen. Du solltest es so umschreiben ($_GET- und $_POST-Variablen mit isset benutzen), dass es auch in Umgebungen ohne register_globals funktionieren kann.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Login Script Problem

      Ok, habe mich mit dem Thema SQL Injections noch nicht wirklich auseinander gesetzt.

      Am Beispiel index.php

      Original Code
      Code:
      if (isset($log)) {
          echo 'Login inkorrekt!';}
      ändern in (?)
      Code:
      if(isset($_POST['log'])) {
          echo 'Login inkorrekt!';}

      Am Beispiel login.php

      Original Code
      Code:
      $benutzer = $_POST['benutzer'];
       $pass = $_POST['pass'];
      ändern in (?)
      Code:
      if(isset($_POST['benutzer'])) {
          $benutzer = $_POST['benutzer'];
          $pass = $_POST['pass'];
          }
      Bin ich da richtig oder verstehe ich da jetzt gerade was falsch?

      Bezüglich des Code-Breaks, kann ich diesen hier im Forum einstellen oder muss ich ihn extern vornehmen bevor ich poste?

      Kommentar


      • #4
        Du hast es richtig verstanden. Auch die Prüfungen mit isset sehen nach sauberem Code aus.

        Was du mit Code-Breaks meinst, ist mir nicht ganz klar, aber es gibt hier allgemeine Code-Tags und spezielle für PHP, die du bitte für PHP-Code benutzt.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Post || get

          Also ich hatte meinen Code jetzt vollständig umgeschrieben, doch die $_POST Variablen wollten einfach nicht von der login.php auf die index.php gesendet werden.
          Ich habe es dann so umgeschrieben das die login.php $_GET Variablen zurückgibt, jetzt funktioniert es.

          Ich hänge das Listing noch einmal dran, falls noch irgendwelche Fehler seitens SQL Injections sein sollten, oder falls ihr noch einen Tipp für mich habt, wieso meine $_POST Variablen nicht funktioniert haben, einfach drauf los posten!

          Greetz
          dEiSi

          index.php
          PHP-Code:
          <?php
              
          if (!isset($_SESSION)) {
                  
          session_start();
              }
              
          ?>

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
          <title>Sass-Content</title>
          <link href="sc/dateien/sc_standard.css" rel="stylesheet" type="text/css">
          <link href="sc/dateien/sc_login.css" rel="stylesheet" type="text/css">

          </head>

          <body>
          <?php     
              ?>
          <div id="Layer1">
            <div id="Layer2">
              <div id="Layer3">
          <form name="login" method="post" action="sass-content.php" >
           <input name="benutzer" type="text" tabindex="0" value="Benutzer" onFocus= (value="")>
           <input name="pass" type="password" value="Passwort" onFocus=(value="")>
          <input name="login_btn" type="submit" class="btn" value="Login">
                </form>
              </div>
              <div id="Layer4">
          <?php
            
          if (isset($_GET['log']) & $_GET['log'] = "1") {
             echo 
          'Login inkorrekt';
             die;
                      }
                  if (isset(
          $_GET['meldung']) & $_GET['meldung'] = "1" ) {
                          echo 
          'Bitte anmelden';
                          die;
                      }
          if (isset(
          $_GET['meldung']) & $_GET['meldung'] = "2" ) {
          echo 
          'Bitte geben Sie Ihre Login-Daten ein!';
                          die;
                      }
                  if (isset(
          $_GET['logout']) & $_GET['logout'] = "1") {
                      echo 
          'Sie haben sich erfolgreich abgemeldet!';
                      
          session_destroy();
                  }
          ?>
              </div>
            </div>
          </div>

          </body>
          </html>
          login.php
          PHP-Code:
          <?php
          //Session starten. (ACHTUNG! Muss vor allem anderen stehen, sonst gibt's eine Fehlermeldung!)
              
          if (!isset($_SESSION)) {
                  
          session_start();
              }
                  
              if (isset(
          $_POST['benutzer']) & isset($_POST['pass'])) {
                  if (!(
          $_POST['benutzer'] == "" || $_POST['benutzer'] == "Benutzer") & 
          !(
          $_POST['pass'] == "" || $_POST['pass'] == "Passwort")) {
              
          //Übergebener POST-Inhalt wird in Variablen geschrieben.
                  
          $benutzer $_POST['benutzer'];
                  
          $pass $_POST['pass'];
                  } else {
                          
          header("Location: index.php?meldung=2");
              }
              }
                  
              
          //Wenn $benutzer existiert, wird geprüft ob ein Ergebnis vorliegt.
              
          if(isset ($benutzer)) {
                  
          $login "select benutzer from login where benutzer='".$benutzer."' 
          and passwort='"
          .$pass."'";
                  
          $result mysql_query($login) or die(mysql_error());
                  
              
          //Sollte kein Ergebnis vorliegen, wird zum Login-Formular weitergeleitet 
          und eine Fehlermeldung 
          ausgegeben
          .
              if(!(
          $row mysql_fetch_row($result))) {
                  
          $_POST['log'] = 1;
                  
          header("Location: index.php?log=".$_POST['log']."");
              }else{
                  
          //Liegt ein Ergebnis vor, werden die Daten in die Session geschrieben.
                  
          $_SESSION['angemeldet'] = "ja";
                  
          $sclogin "select vorname, nachname from benutzer where 
          benutzername ='"
          .$benutzer."' and passwort ='".$pass."'";
                  
          $scresult mysql_query($sclogin) or die(mysql_error());
                  
                  
          $user mysql_fetch_assoc($scresult);
                  
          $_SESSION['vorname'] = $user['vorname'];
                  
          $_SESSION['nachname'] = $user['nachname'];
              }
              }else {
                      
          //Weiterleitung zum Anmeldeformular
                      
          header("Location: index.php?meldung=1");
                  }
                  
          ?>
          Zuletzt geändert von deisi; 12.04.2010, 22:24.

          Kommentar


          • #6
            Das wundert mich nicht (ist mir aber auch nicht eher aufgefallen).

            Du leitest ja nur mit header um, also sind alle Parameter GET-Parameter. POST-Daten bekommst du nur, wenn du ein Formular mit method="POST" abschickst.

            Gruß,

            Amica
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Ja jetzt wo du es sagst leuchtet es mir auch ein.
              Danke nochmal für deine Hilfe!

              Greetz
              dEiSi

              Kommentar


              • #8
                Du verwechselst in deinem Code oft == und =. Das erste ist ein Vergleich, das letztere eine Zuweisung, mit der du deine Daten manipulierst, was fatale Auswirkungen haben kann.

                Außerdem verwendest du oft & statt &&, was in deinem Fall zwar keinen großen Unterschied macht, aber in anderen Fällen ebenfalls fatale Auswirkungen haben kann.

                Bitte mach dich also nochmal über alle Operatoren schlau.

                Gruß,

                Amica
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Problem mit Link in einer SESSION

                  Ja da hast du recht.
                  Hab mir gerade die ganzen Operatoren noch mal angeschaut, muss mir das nochmal einbleuen!

                  Habe jetzt allerdings schon wieder ein Problem.

                  Habe den Login durchgeführt, komme also auf meine gesicherte Seite.
                  Wenn ich nun allerdings einen Link auf dieser Seite anklicke, der intern weiterführen soll, werde ich direkt wieder auf die Login-Seite geleitet.

                  Die Links sehen ungefähr so aus:
                  sass-content.php?Benutzerverwaltung

                  Habe dazu dann auch eine If-Anweisung geschrieben, das wenn die $_GET z.b. Benutzerverwaltung lautet, gewisse Daten aus der Datenbank geholt, in ein assoziatives Array geladen und ausgegeben werden sollen.

                  Naja, hier mal das Listing, falls mir jemand weiterhelfen kann!

                  PHP-Code:
                  if (isset($_GET)) {
                  if (
                  $_GET "Start") {
                  $backend "select * from backend_nav";
                  $menu mysql_query($backend) or die (mysql_error());
                      
                  $backendmenu mysql_fetch_assoc($menu);
                  } else {
                  if (
                  $_GET "Einstellungen") {
                  $backend "select * from options_nav";
                  $menu mysql_query($backend) or die (mysql_error());
                              
                  $backendmenu mysql_fetch_assoc($menu);
                  } else {
                  if (
                  $_GET "Benutzerverwaltung") {
                  $backend "select * from user_nav";
                  $menu mysql_query($backend) or die (mysql_error());
                              
                  $backendmenu mysql_fetch_assoc($menu);
                  } else {
                  if (
                  $_GET "Seitenverwaltung") {
                  $backend "select * from site_nav";
                  $menu mysql_query($backend) or die (mysqlerror());
                              
                  $backendmenu mysql_fetch_assoc($menu);
                  } else {
                  if (
                  $_GET "Contentverwaltung") {
                  $backend "select * from content_nav";
                  $menu mysql_query($backend) or die (mysql_error());
                              
                  $backendmenu mysql_fetch_assoc($menu);
                  }
                  }
                  }
                  }
                  }    

                  Kommentar


                  • #10
                    Solche if-Ketten postest du bitte mit den üblichen Einrückungskonventionen, damit man sieht, was wohin gehört.

                    Das Session-Handling ist jetzt nur nicht gepostet oder fehlt das in der Datei wirklich?

                    Gruß,

                    Amica
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      ???

                      Ähm, nee ich glaube das fehlt wirklich.

                      Habe jetzt aber ehrlich gesagt auch noch keinen Plan wie das von statten geht.

                      Hast du mir da einen kleinen Tipp bzw. eine Site auf der ich nachschauen kann und es mehr oder weniger gut erklärt wird?

                      Danke schonmal!

                      Grüße

                      Kommentar


                      • #12
                        Also ich glaube überall wo sowas wie
                        PHP-Code:
                        if ($_GET "Einstellungen") { 
                        steht, da müsstest du das einfache Gleichhaltszeichen mit einen doppelten Ersetzen. Ein einfaches ist ja nur eine zuweisung bzw definition und dürfte in deinem fall ja dann immer wahr sein.

                        Und was ich jetzt nicht weiß ob das php was ausmacht wenn du prüfst ob " $_GET " = irgendwas ist, ich kenne das bisher nur so in der Art:
                        PHP-Code:
                        if($_GET['site'] == "Einstellungen")
                        {
                               
                        // do something

                        Aber wie gesagt da bin ich mir nich ganz sicher ob das egal ist.

                        Kommentar


                        • #13
                          Es ist ganz und gar nicht egal und eigentlich ist es auch nicht das erste Mal, dass Deisi darauf hingewiesen wird.
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Kommentar


                          • #14
                            Zitat von 2Bad4You Beitrag anzeigen
                            Also ich glaube überall wo sowas wie
                            PHP-Code:
                            if ($_GET "Einstellungen") { 
                            steht, da müsstest du das einfache Gleichhaltszeichen mit einen doppelten Ersetzen. Ein einfaches ist ja nur eine zuweisung bzw definition und dürfte in deinem fall ja dann immer wahr sein.

                            Und was ich jetzt nicht weiß ob das php was ausmacht wenn du prüfst ob " $_GET " = irgendwas ist, ich kenne das bisher nur so in der Art:
                            PHP-Code:
                            if($_GET['site'] == "Einstellungen")
                            {
                                   
                            // do something

                            Aber wie gesagt da bin ich mir nich ganz sicher ob das egal ist.
                            Jo danke!
                            Das Problem habe ich nach dem erneuten anschauen der Operatoren auch eingesehen.

                            Habe gerade ein Problem mit der Session.

                            Kommentar


                            • #15
                              Zitat von AmicaNoctis Beitrag anzeigen
                              Es ist ganz und gar nicht egal und eigentlich ist es auch nicht das erste Mal, dass Deisi darauf hingewiesen wird.
                              Genau, hast mich ja auch schon darauf hingewiesen.

                              Bezüglich des Session Handlings, dürfte reichen wenn ich einfach session_start(); an erste Stelle setze oder?

                              wenn ja, habe noch zwei dateien inkludiert, gibt das dann ein problem?

                              Kommentar

                              Lädt...
                              X