tino: Login

Ich habe ein Problem mit meinem Loginskript, es will nicht so wie es sollte, das registrieren ist kein problem aber die geschützte seite kommt immer. Ich schreibe unten mall die Skripte rein so wie ich sie benutze.

						<form action="login.php" method="post">  
  
							Benutzer:  
								<br>  
									<input type="text" size="14" maxlength="25" name="user">  
								<br>  
  
							Passwort:  
								<br>  
									<input type="password" size="14" maxlength="25" name="password">  
								<br>  
									<input type="submit" value="Login">  
						</form>

login.php

<?php  
session_start();  
// version 1.1  
?>  
  
<?php  
include "config.php";  
  
  
$user = $_POST["user"];  
$passwort = md5($_POST["password"]);  
  
$abfrage = "SELECT user, passwort FROM user WHERE user LIKE '$user' LIMIT 1";  
$ergebnis = mysql_query($abfrage);  
$row = mysql_fetch_object($ergebnis);  
  
if($row->passwort == $passwort)  
    {  
    $_SESSION["user"] = $user;  
    echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>";  
    }  
else  
    {  
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"index.htm\">Login</a>";  
    }  
  
?>

Geheim.php

<?php  
session_start();  
?>  
  
<?php  
if(!isset($_SESSION["user"]))  
   {  
   echo "Bitte erst <a href=\"index.htm\">einloggen</a>";  
   exit;  
   }  
echo "<br> session_id = ".session_id();  
include "footer.php";  
  
?>

Jetzt habe ich bei jeder zu schützenden Seite das geheim php über den html tag gesetzt sieht also so aus:

<?php  
session_start();  
?>  
<html>  
	<head>

Ich denke das das der fehler ist und da etwas vollständig anderes rein muss?

Gruss

  1. Grüße,
    ich sehe keinerlei methoden um die anzeige von html der geschützten seite zu unterbinden. willst du es vllt in die ifabfrage des suers mti reinpacken? zudem - abfrage ob etwas einfach nur deklariert/gesett ist, ist definitv kein guter sicherheitsansatz.
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
    1. Grüße,
      ich sehe keinerlei methoden um die anzeige von html der geschützten seite zu unterbinden. willst du es vllt in die ifabfrage des suers mti reinpacken? zudem - abfrage ob etwas einfach nur deklariert/gesett ist, ist definitv kein guter sicherheitsansatz.
      MFG
      bleicher

      Ich würde das ganze ja am liebsten über htacces machen aber dort verstehe ich es leider noch weniger, und hier würde es nur um eine einzelne seite gehen welche nicht gerade angeschaut werden muss ob sie sicher ist ist 2t rangig.

      wollte es eigentlich in der ifabfrage machen wenn du true bist dann darf man lesen wenn nein dann über header("location: wohl gerade weiter.

      1. Grüße,

        wollte es eigentlich in der ifabfrage machen wenn du true bist dann darf man lesen wenn nein dann über header("location: wohl gerade weiter.

        böser bube! wilslt du den schutz noch gleich über JS
        alert("wenn sie hier nix sein dürfen, weggehen!");
        lösen?
        MFG
        bleicher

        --
        __________________________-

        FirefoxMyth
  2. Hello,

    Ich habe ein Problem mit meinem Loginskript,

    mindestens eins ;-)

    es will nicht so wie es sollte, das registrieren ist kein problem aber die geschützte seite kommt immer. Ich schreibe unten mall die Skripte rein so wie ich sie benutze.

    login.php

    <?php
    session_start();
    include "config.php";

    $passwort = md5($_POST["password"]);

    $abfrage = "UPDATE user
                  SET logintime = now()
                  WHERE user = '" . mysql_real_escape_string($_POST['user']) . "'" .
                      AND passwort = '" . mysql_real_escape_string($_POST["password"]) . "'";

    Bitte lesen: [link:http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel]

    $ergebnis = mysql_query($abfrage);

    if ($ergebnis and mysql_affected_rows($ergebnis) == 1)
      {
         ## Anmeldung erfolgreich
         ## weitere Aktionen zur Auswertung des angemeldeten Benutzers
         ## z.B. speichern des Loginstatus in der Session
      }
      else
      {
         ## Aktionen zum Ablehnen
         exit;
      }

    ?>

      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
    1. Hello,

      Hello,

      Ich habe ein Problem mit meinem Loginskript,

      mindestens eins ;-)

      es will nicht so wie es sollte, das registrieren ist kein problem aber die geschützte seite kommt immer. Ich schreibe unten mall die Skripte rein so wie ich sie benutze.

      login.php

      <?php
      session_start();
      include "config.php";

      $abfrage = "UPDATE user
                    SET logintime = now()
                    WHERE user = '" . mysql_real_escape_string($_POST['user']) . "'" .
                        AND passwort = '" . md5($_POST["password"]) . "'";

      Das passwort sollte natürlich trotzdem gehashed werden. Da sollte man dann

      mysql_real_escap_string() weglassen dürfen.

      Bitte lesen: [link:http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel]

      $ergebnis = mysql_query($abfrage);

      if ($ergebnis and mysql_affected_rows($ergebnis) == 1)
        {
           ## Anmeldung erfolgreich
           ## weitere Aktionen zur Auswertung des angemeldeten Benutzers
           ## z.B. speichern des Loginstatus in der Session
        }
        else
        {
           ## Aktionen zum Ablehnen
           exit;
        }

      ?>

        
      Liebe Grüße aus dem schönen Oberharz  
        
        
      Tom vom Berg  
      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
        
      
      -- 
       ☻\_  
      /▌  
      / \ Nur selber lernen macht schlau  
      <http://bergpost.annerschbarrich.de>
      
  3. hi,

    beim 'Logn' gibt es mehrere Möglichkeiten, von denen jedoch nur Eine den 'Erfolg' wiedergibt:

    • Passwort-Datei nicht gefunden, oder DB-Verbindung fehlgeschlagen, o.ä.
    • bei Datei: keine Leseberechtigung auf die Datei
    • kein Benutzer angegeben/eingegeben
    • kein Passwort eingegeben
    • Benutzer nicht gefunden
    • Passwort nicht richtig
    • Benutzer gefunden, Passwort OK.

    Dementsprechend sollte die Kontrollstruktur aussehen, die sich insofern vereinfachen lässt, als dass zuerst der Fehler abgefragt wird.

    Hotti

  4. So habe das gesammte umgeschrieben und es geht jetzt auch mit der session, nur jetzt ist bei mir die frage aufgetaucht ob ich auch nur einen Teil der HTML Seite Anzeigen kann und den rest mittels php ausblenden?

    Die seite wird mittels session gespert.

    <?  
    session_start();  
    if(!session_is_registered(myusername)){  
    header("location:index.htm");  
    }  
    ?>
    

    Ich stelle mit das so vor,

    <?  
    if(!session_is_registered(myusername)){  
    <!--  
    }  
    ?>
    

    und dann weiter unten einfach ein --> dort wo es enden würde. bin ich da auf dem richtigen weg oder vollständig von allen Geistern verlassen?

    1. Mahlzeit Tino,

      <?

      if(!session_is_registered(myusername)){
      <!--
      }
      ?>

        
      Selbst wenn das funktionieren würde, würde ja trotzdem der gesamte produzierte HTML-Code an den Browser übertragen (dort aber wegen der Kommentar-Zeichen nicht angezeigt ... natürlich nur, wenn der HTML-Code selbst nicht auch schließende Kommentar-Zeichen enthält!) - und ich denke nicht, dass Du das willst.  
        
      Was hältst Du davon:  
        
      ~~~php
      if (session_is_registered($myusername)) {  
      ?>  
      <p>  
      Hallo <em><?php echo $myusername; ?></em>  
      Dieser Absatz ist nur sichtbar, wenn Du eingeloggt bist!  
      </p>  
      <?php  
      }
      

      bin ich da auf dem richtigen weg oder vollständig von allen Geistern verlassen?

      Ersteres auf keinen Fall und bei Letzterem wage ich keine Aussage ... ;-)

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. Hello,

        if(!session_is_registered('myusername'))

        Die Funktion ist so uralt, dass sie schon auf den Keilschrifttafeln der Sumerer durchgestrichen war.

        Das kann man übrigens auch unter http://de.php.net/manual/en/function.session-is-registered.php nachlesen.

        Der Ablauf ist folgender:

        • Session starten

        session_start();

        • in der Session nachschauen, ob eine Anmeldung registriert ist

        define('MAX_WO_REQUEST', 360);  ## maximum time without a request in seconds
          $now = time();

        if(isset($_SESSION['login']['lastrequest'])
             and $_SESSION['login']['lastrequest'] > $now-MAX_WO_REQ)
          {
              $_SESSION['login']['lastrequest'] = $now;

        ## User is logged
              ## ... further stuff
              ## preferably put this whole cahpter in a function
          }
          else
          {
              include('../includes/loginpage.php');

        ## or alternatively
              # header('http://example.org/loginpage.php')

        exit;
          }

        • wenn der user nicht angemeldet ist, wie oben gezeigt entweder die Loginseite laden,
            auf die Loginseite verweisen, oder auch einfach nur die öffentlichen Inhalte anzeigen
            und die Anzeige der "geheimen" Inhalte unterlassen.

        Und beim Login wird dann

        • die Session gestartet

        if (isset($_POST['loginbutton']))
          {
              ## ...

        - die geposteten Userdaten (Username und Passwort) mit der Datenbank/Dateieintrag verglichen
            - bei Erfolg die Userdaten in die Session eingetragen

        $_SESSION['login'] = array();
              $_SESSION['login']['lastrequest'] = $now;
              $_SESSION['login']['logintime'] = $now;
              $_SESSION['login']['username'] = $_POST['username'];

        ## Das Passwort wollen wir bitte nicht in der Session speichern!

        - oder im Misserfolgsfall das ganze Loginteilarray aus der Session rauslöschen

        unset($_SESSION['login'];

        }

        Das bedeutet also für die Logik: Das Vorhandensein einer gültigen Session deutet _nicht_ auch auf eine gültige Anmeldung hin, ist aber Voraussetzung dafür. Eine gültige Anmeldung setzt eine gültige Session voraus.

        Die Zeit MAX_WO_REQ (max without request) ist eine Konstante, die Du dir selber definierst und in deiner persönlichen Konfigurationsdatei für das Projekt ablegst. Sie muss kürzer sein, als die systemspezifische Zeit in session.gc_maxlifetime (siehe php.ini). Die kannst Du ggf. auch verlängern. Je länger allerdings ein Session-Identifier gültig ist, desto angreifbarer wird die Session. Das ist aber ein anderes Thema, zu dem sich Christian Seiler hier schon öfter hilfreich ausgelassen hat.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Ich danke euch beiden für die Antwort, das mit dem $_SESSION muss ich mir dann noch anschauen und in einem schlauen PHP-Buch nachlesen gehen wie das funktioniert, kennt jemand etwa gerade ein gutes Buch oder auch eine gute Webseite wo es von Grund auf aufgebaut wird? bei mir sind in der Zwischenzeit so viele Lücken drin und so veraltet das es wohl besser wäre von 0 an zu beginnen. Das Beispiel mit dem Echo zeigt es mir wieder mal.

          1. Hello,

            Ich danke euch beiden für die Antwort, das mit dem $_SESSION muss ich mir dann noch anschauen und in einem schlauen PHP-Buch nachlesen gehen wie das funktioniert, kennt jemand etwa gerade ein gutes Buch oder auch eine gute Webseite wo es von Grund auf aufgebaut wird? bei mir sind in der Zwischenzeit so viele Lücken drin und so veraltet das es wohl besser wäre von 0 an zu beginnen. Das Beispiel mit dem Echo zeigt es mir wieder mal.

            Da guckst Du dir zuerst mal die Beispiele im PHP-Manual an.
            http://de3.php.net/manual/en/book.session.php
            http://de3.php.net/manual/en/ref.session.php

            Die Benutzerkommentare sind meistens recht aufschlussreich.

            Und achte darauf, welche Funktionen als "deprecated" bezeichnet werden. Die solltest Du gleich auslassen.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
      2. Hallo EKKi

        Ich danke dir, habe es zwar noch ein bisschen abgeändert, aber ich bin froh das du mich auf den richtigen Weg geleitet hast, danke dafür auch noch das ich selber noch minimal was überlegen musste :-)

        Gruss

  5. Hallo mein Login geht jetzt und die anderen teile auch, doch jetzt kommt der teil mit der Registration, der Code sieht so aus, ich finde einfach keinen Fehler mehr vielleicht findet jemand von euch noch einen Fehler.

    <?php  
    <?php  
      
      
    $user = $_POST["user"];  
    $passwort = $_POST["passwort"];  
    $passwort2 = $_POST["passwort2"];  
    $email = $_POST["email"];  
    $numer = $_POST["handy"];  
      
    include("config.php");  
      
    if($passwort != $passwort2 OR $user == "" OR $passwort == "" OR $email == "" OR $numer == "")  
        {  
        exit;  
        }  
    $passwort = md5($passwort);  
    $result = mysql_query("SELECT userid FROM user WHERE user LIKE '$user'");  
    $menge = mysql_num_rows($result);  
      
    if($menge == 0)  
        {  
        $eintrag = "INSERT INTO user (user, passwort, email, numer) VALUES ('$user', '$passwort', '$email', '$numer')";  
        $eintragen = mysql_query($eintrag);  
        if($eintragen == true)  
            {  
            header("location: www.tkobler.ch/index.php");  
            }  
        else  
            {  
            header("location: www.tkobler.ch/registrationfals.php");  
            }  
        }  
    else  
        {  
        echo "Benutzername schon vorhanden.";  
        }  
    ?>  
    ?>
    

    config.php

    <?php  
    // version 1.1  
    $host="localhost"; // Host name  
    $username="xxx"; // Mysql username  
    $password="xxx"; // Mysql password  
    $db_name="login"; // Datenbankname  
    $tbl_name="user"; // Tabelenname  
      
      
    mysql_connect("$host", "$username", "$password")or die("cannot connect");  
    mysql_select_db("$db_name")or die("cannot select DB");  
    ?>
    
    1. Mahlzeit Tino,

      der Code sieht so aus, ich finde einfach keinen Fehler mehr

      Tritt denn ein Fehler auf? Wenn ja: wie lautet er? Oder erwartest Du, dass Deine Leser hellsehen können?

      vielleicht findet jemand von euch noch einen Fehler.

      Etliche:

      <?php
      <?php

      Was soll das? Warum startest Du zweimal mit einem PHP-Bereich? Hier sollte schon ein Fehler auftreten ...

      $user = $_POST["user"];
      $passwort = $_POST["passwort"];
      $passwort2 = $_POST["passwort2"];
      $email = $_POST["email"];
      $numer = $_POST["handy"];

      Derartiges simples Umkopieren ist sinnlos und gefährlich!

      $passwort = md5($passwort);
      $result = mysql_query("SELECT userid FROM user WHERE user LIKE '$user'");

      Das Verwenden von Nutzereingaben bzw. von außen kommenden Daten ohne eine Prüfung ist fahrlässig und gefährlich. Informiere Dich *mindestens* zum Thema "Kontextwechsel". Darüber hinaus solltest Du IMHO eine Validierung der Eingabeparameter vornehmen - merke: ALL INPUT IS EVIL!

      if($eintragen == true)

      "Wenn es wahr ist, dass $eintragen wahr ist ..."

      header("location: www.tkobler.ch/index.php");

      Das ist kein vollständiger URL, den header() (bzw. die entsprechende HTTP-Spezifikation) aber erwartet.

      ?>
      ?>

      Siehe meine Anmerkung zum zweimaligen "Öffnen" eines PHP-Bereichs weiter oben.

      mysql_connect("$host", "$username", "$password")or die("cannot connect");
      mysql_select_db("$db_name")or die("cannot select DB");

      Siehe Zitat 1282 ...

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|