ilch Forum » Allgemein » HTML, PHP, SQL,... » Login Problem

Geschlossen
  1. #1
    User Pic
    freak Mitglied
    Registriert seit
    31.01.2007
    Beiträge
    856
    Beitragswertungen
    0 Beitragspunkte
    Ich hab ein kleines Problem es ist nicht ilch gleich vorweg, habe mir hier nen login gecodet das COOKIE wird gesetze jedoch will die abfrage für das switch() nicht funktionieren.

    Hier mal der code

    <?php 
    if (isset($_POST['submit'])) {
    
    	$nick = escape($_POST['nick'],'string');
    	$pw = escape($_POST['pw'],'string');
    
    
    $abf = mysql_query("SELECT * FROM `user` WHERE `name` = '$nick' AND `pw` = '$pw'");
    $row = mysql_real_escape_string(mysql_num_rows($abf));
    
    if($row == true){
    setCookie("name",$_POST["nick"],time()+2592000);
    echo 'Du bist eingeloggt<br>';
    }else{
    echo 'Was willst du hier eigentlich du arsch';
    	}
    }
    
    $name = mysql_query("SELECT `name` FROM `user` WHERE `name` = '".$_COOKIE['name']."'");
    $row2 = mysql_fetch_assoc($name);
    echo mysql_error();
    
    switch($_COOKIE['name']) {
    
    case $row2['name']:
    echo 'du bist eingeloggt';
    
    break;
    
    default:
    ?>
    <form method="post">
    <table width="100%" border="0" cellspacing="0" cellpadding="3">
      <tr>
        <td width="22%" align="left">Benutzername:&nbsp;</td>
        <td width="78%" align="left"><input type="text" name="nick"></td>
      </tr>
      <tr>
        <td align="left">Passwort:&nbsp;</td>
        <td align="left"><input type="password" name="pw"></td>
      </tr>
      <tr>
        <td colspan="2" align="center"><input type="submit" name="submit" value="Login"></td>
      </tr>
    </table>
    </form>
    <?php
    break;
    }
    ?>



    das ist die fehlerstelle
    $name = mysql_query("SELECT `name` FROM `user` WHERE `name` = '".$_COOKIE['name']."'");
    $row2 = mysql_fetch_assoc($name);
    echo mysql_error();
    case $row2['name']:


    das cookie ist gesetzt hab ich schon geschaut....,
    fehlermeldung kommt keine


    Ich sag schonmals danke


    Zuletzt modifiziert von freak am 05.01.2009 - 12:04:33
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    freak Mitglied
    Registriert seit
    31.01.2007
    Beiträge
    856
    Beitragswertungen
    0 Beitragspunkte
    [EDIT]
    zu früh gefreut es geht doch nicht :-D


    Zuletzt modifiziert von freak am 05.01.2009 - 12:05:43
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    boehserdavid Mitglied
    Registriert seit
    26.08.2006
    Beiträge
    2.122
    Beitragswertungen
    2 Beitragspunkte
    Hey, freak!

    $_POST["nick"] in $_POST['nick'] ändern beim Cookie setzen

    Und dann kannst du mal zum debuggen
    print_r($_COOKIE);
    versuchen, dann wird der aktuelle Cookie ausgegeben und du kannst gucken, ob die richtigen WErte gesetzt wurden.
    Bzw. $row2['name'] auch mal mit Echo ausgeben, vielleicht ist der Wert auch leer.

    Mit böhsen Grüßen
    BöhserDavid
    -Heute schon böhse gewesen?- Ab zur Community
    -No Support via Contact-
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    freak Mitglied
    Registriert seit
    31.01.2007
    Beiträge
    856
    Beitragswertungen
    0 Beitragspunkte
    ich kann gar kein cookie setzen, weil er mir dauerhaft anzeigt das ich schon eingeloggt bin
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    boehserdavid Mitglied
    Registriert seit
    26.08.2006
    Beiträge
    2.122
    Beitragswertungen
    2 Beitragspunkte
    Ausloggen?
    setcookie('cookiename',$value, -99999999999999);
    -Heute schon böhse gewesen?- Ab zur Community
    -No Support via Contact-
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    freak Mitglied
    Registriert seit
    31.01.2007
    Beiträge
    856
    Beitragswertungen
    0 Beitragspunkte
    ich habe im browser das cookie gelöscht..
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    freak Mitglied
    Registriert seit
    31.01.2007
    Beiträge
    856
    Beitragswertungen
    0 Beitragspunkte
    ich habs, die Lösung:

    $name = mysql_query("SELECT `name` FROM `user` WHERE `name` = '".$_COOKIE['name']."'");
    $row2 = mysql_fetch_assoc($name);
    
    if(!empty($row2['name'])) {
     $swname = $row2['name'];
     }else{
     $swname = '1';
     }
    
    switch($_COOKIE['name']) {
    
    default:
    ?>
    <form method="post">
    <table width="100%" border="0" cellspacing="0" cellpadding="3">
      <tr>
        <td width="22%" align="left">Benutzername:&nbsp;</td>
        <td width="78%" align="left"><input type="text" name="nick"></td>
      </tr>
      <tr>
        <td align="left">Passwort:&nbsp;</td>
        <td align="left"><input type="password" name="pw"></td>
      </tr>
      <tr>
        <td colspan="2" align="center"><input type="submit" name="submit" value="Login"></td>
      </tr>
    </table>
    </form>
    <?php
    break;
    
    
    
    case $swname:
    ?>
    du bist eingeloggt
    <?php
    break;
    
    }


    habe den code ncoh ein wenig optimiert und habs ohne switch gemacht
    <?php 
    if (isset($_POST['submit'])) {
    
    	$nick = escape($_POST['nick'],'string');
    	$pw = escape($_POST['pw'],'string');
    
    
    $abf = mysql_query("SELECT * FROM `user` WHERE `name` = '$nick' AND `pw` = '$pw'");
    $row = mysql_real_escape_string(mysql_num_rows($abf));
    
    if($row == true){
    setCookie("name",$_POST['nick'],time()+2592000);
    header("Location: index.php?include=login");
    }else{
    echo 'Was willst du hier eigentlich du arsch';
    	}
    }
    
    if (empty($_COOKIE['name'])) {
    echo '<form method="post" action="index.php?include=login">
    <table width="100%" border="0" cellspacing="0" cellpadding="3">
      <tr>
        <td width="22%" align="left">Benutzername:&nbsp;</td>
        <td width="78%" align="left"><input type="text" name="nick"></td>
      </tr>
      <tr>
        <td align="left">Passwort:&nbsp;</td>
        <td align="left"><input type="password" name="pw"></td>
      </tr>
      <tr>
        <td colspan="2" align="center"><input type="submit" name="submit" value="Login"></td>
      </tr>
    </table>
    </form>';
    }else{
    echo 'du bist drinnen';
    }
    ?>



    Zuletzt modifiziert von freak am 05.01.2009 - 13:18:15
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Surangumal Mitglied
    Registriert seit
    01.01.2009
    Beiträge
    28
    Beitragswertungen
    0 Beitragspunkte
    Sorry dass ich meckere, aber so wie du das programmiert hast, darf man das auf keinen Fall machen!

    Ob man eingeloggt ist oder nicht, darf man nicht an einem clientseitigen Cookie festmachen, sondern immer an einem serverseitigen Flag.

    Überleg man folgendes:

    Ein Angreifer (Mr. X) weiß dass es einen Benuzter "Alice" gibt. Jetzt erzeugt sich Mr. X mit einem Browser-Addon einfach ein Cookie namens "name" mit dem Wert "Alice". Und schon ist er als "Alice" eingeloggt, ohne Kennwort!

    Du musst $_SESSION verwenden um die den Zustand "ist eingeloggt" zu merken.

    Gruß
    Jochen
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    boehserdavid Mitglied
    Registriert seit
    26.08.2006
    Beiträge
    2.122
    Beitragswertungen
    2 Beitragspunkte
    Surangumal: Es mag dir vielleicht entgangen sein, aber das war ein Beispiel, alleine an dem Satz zu erkennen

    echo 'Was willst du hier eigentlich du arsch';

    ...

    Freak ist schon klar, dass er ein Unique nehmen muss um es zu sichern, aber nicht zwingend, weil man mit den Varibalen in dem Cookie viel mehr anfangen kann, dieses Cookie bewirkt nur, dass das Loginformular verschwindet und nix anderes...
    -Heute schon böhse gewesen?- Ab zur Community
    -No Support via Contact-
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Surangumal Mitglied
    Registriert seit
    01.01.2009
    Beiträge
    28
    Beitragswertungen
    0 Beitragspunkte
    Oh, ist mir entgangen zwinker

    Na dann, nichts für ungut Drink
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    freak Mitglied
    Registriert seit
    31.01.2007
    Beiträge
    856
    Beitragswertungen
    0 Beitragspunkte
    @Surangumal: Warum sollte es den mit COOKIES nicht gehen, ich kann ja ein zweites COOKIE erzeugen in dem das passwort steht ich denke nicht das ein user von dem andern user das passwort weis um das cookie zu erzeugen.. ?
    wie siehst du das?
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    Surangumal Mitglied
    Registriert seit
    01.01.2009
    Beiträge
    28
    Beitragswertungen
    0 Beitragspunkte
    Okay das wäre wohl erstmal okay. Also 2 Cookies, eins mit Usernamen und eins mit Passwort.

    Ich sehe aber noch 2 Nachteile:

    a) Das Kennwort wird im Klartext auf dem Client gespeichert und da dein Cookie ein session-persistentes Cookie ist, wird es im IE als File auf der Festplatte gespeichert, d.h. das Kennwort steht auf der Festplatte im Klartext!
    Das Klartext-Problem könnte man aber umgehen in dem man nur einen Hash-Wert im Cookie gespeichert. (Das würde ich auf jeden Fall so machen. Klartext speichern ist eigentlich immer ein NoGo)

    b) Alle Browser zeigen Cookies und deren Werte auf Wunsch an. Wenn also jemand kurz nicht am Arbeitsplatz ist, kann sich der Angreifer nicht nur die Kontrolle des PCs für diesen Zeitraum übernehmen (was ja völlig logisch ist), sondern er kann sich das Kennwort (bzw. den Hashwert davon) aufschreiben und kann sich dann immer nach belieben "einloggen".

    Sicher ist das jetzt schon etwas paranoid gedacht, aber beim Thema Sicherheit bin ich persönlich der Meinung, dass man sich an etablierte Standards halten sollte. Daher würde ich von solchen clientseitigen Lösungen einfach absehen.

    Viele Grüße
    Jochen
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    freak Mitglied
    Registriert seit
    31.01.2007
    Beiträge
    856
    Beitragswertungen
    0 Beitragspunkte
    naja man kannst auch übertreiben ;-),
    aber gut zum teil hast du eigentlich auch recht glücklich
    0 Mitglieder finden den Beitrag gut.
  14. #14
    User Pic
    boehserdavid Mitglied
    Registriert seit
    26.08.2006
    Beiträge
    2.122
    Beitragswertungen
    2 Beitragspunkte
    ZitatZitat geschrieben von Surangumal

    ...
    Du musst $_SESSION verwenden um die den Zustand "ist eingeloggt" zu merken.
    ...


    Nun hast du nur ein Problem. Die Benutzerunfreundlichkeit, bei der Dauer einer Session, wird drastisch steigen. Jeder muss sich nach dem Verlassen, länger wegbleiben neu einloggen.
    Um es aber vielleicht doch mit Cookies zu machen, müsste man nur die aktuelle SessionID in de DB speichern.
    In den Cookie
    SessionID Hash
    User Hash
    PW Hash

    Und das dann abgleichen beim wiederaufruf der Seite, ob der Hash der SessionID in der DB dem Hash in dem Cookie entspricht, wenn ja, dan alles i.O., sonst ausloggen.

    Aber 100% sicher / 100% Benutzerfreundlich, kriegt man es kaum, es wird immer Schwachstellen geben, und sind sie auch noch so klein.

    zwinker
    -Heute schon böhse gewesen?- Ab zur Community
    -No Support via Contact-
    0 Mitglieder finden den Beitrag gut.
  15. #15
    User Pic
    Surangumal Mitglied
    Registriert seit
    01.01.2009
    Beiträge
    28
    Beitragswertungen
    0 Beitragspunkte
    Benutzerfreundlichkeit und Sicherheit stehen in der Regel sich gegenseitig im Weg.

    Man muss halt immer abwegen wie sicher das System sein sollte und welchen Kompromiss man zwischen Benutzerfreundlichkeit und Sicherheit wählt. Und so kann man über das Problem ewig diskutieren, mein anfänglicher Protest richtete sich ja auch nur gegen ein System, dass überhaupt kein Passwort zur Authentifizierung verlangte.

    Zu den Klartextpasswörtern: das Problem ist folgendes, die Leute verwenden oft ein und das selbe Password für viele Systeme. Wenn man irgendwo Kennwörter im Klartext ablegt, dann gefährdet man nicht nur das eigene System, sondern viele. Daher halte ich das Ablegen von Passwörtern im Klartext für sehr problematisch.
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten