tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
435
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Oct 2005
    Ort
    Nottuln
    Beiträge
    1.282
    Hey Leutz,

    ich habe ein Problem mit meinem Login-system auf einer Fanpage.

    Wenn ihr euch mal folgendes anschaut:

    http://olsen.dfmusik.de/index.php?section=login
    Wenn ihr euch da mit folgenden Daten einloggt:
    Nickname: test
    Passwort: test

    Eigentlich sollten sich folgende Menu-punkte umändern:
    Einloggen · Registrieren >> Ausloggen


    Hier meine Scripte:
    login.php:
    PHP-Code:
    <?php 
    $nickname    
    $_POST['nickname'];
    $passwort    $_POST['passwort'];

    $Query "SELECT "
              
    "*"
              
    "FROM "
              
    "user "
              
    "WHERE "
             
    "(nickname like '$nickname') 
              AND "

             
    "(passwort like '$passwort')"
        
    $Result mysql_query ($Query); 

    if (
    mysql_num_rows ($Result) > 0

      
    // Benutzerdaten in ein Array auslesen. 
      
    $data mysql_fetch_array ($Result); 

      
    // Sessionvariablen erstellen und registrieren 
      
    $_SESSION["user_id"]             = $data["id"]; 
      
    $_SESSION["nickname"]         = $data["nickname"]; 
      
    $_SESSION["email"]            = $data["email"];
      

      
    header ("Location: ?section=index");

    else 

      
    header ("Location: ?section=login&fehler=1");

    ?>
    menu.php
    PHP-Code:
    <a href="?section=index">Home</a> 
     &middot;
    <a href="?section=news">News</a>
     &middot;
    <a href="?section=bio">Biography</a>
     &middot;
    <a href="?section=links">Links</a>
     &middot;
    <a href="?section=active">Active</a>
     &middot;
    <a href="?section=stuff">Cool Stuff</a>
     &middot;
    <a href="?section=community">Community</a>
     &middot;
    <?php
    if (!isset ($_SESSION["user_id"])) 
    {
    echo 
    " <a href=\"?section=login\">Einloggen</a> ";
    echo 
    " &middot; ";
    echo 
    " <a href=\"?section=register\">Registrieren</a> ";
    } else {
    echo 
    " <a href=\"?section=logout\">Ausloggen</a> ";
    }
    ?>
    <hr />


    Ich werde jetzt ganz geduldig warten, bis mir jemand hilft

    David
     

  2. #2
    Registriert seit
    Sep 2003
    Ort
    Fürth(Franken)
    Beiträge
    1.060
    Blog-Einträge
    3
    Das hat jetzt zwar nichts mit deinem Problem direkt zu tun, ist aber dennoch sehr wichtig!

    Wenn ich das richtig sehe, wird das Passwort im Klartext in der Datenbank gespeichert?
    Falls das der Fall sein sollte, müsstest du das schnell ändern.

    Und außerdem solltest du in der Datenbank-Abfrage nicht 'LIKE' sondern '=' benutzen.

    greetz
    daddz
     
    be inspired...simplify...

  3. #3
    venyl venyl ist offline Mitglied Silber
    Registriert seit
    Jul 2006
    Beiträge
    71
    Die funktion session_start(); ist schon was schönes was jedoch bei dir fehlt, was heisst das die session garnet existiert und er netmal weiss das du loggen bist...
    Geändert von venyl (10.07.06 um 23:20 Uhr)
     

  4. #4
    Avatar von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    6.160
    Blog-Einträge
    4
    Hallo!
    Zitat Zitat von daddz
    Und außerdem solltest du in der Datenbank-Abfrage nicht 'LIKE' sondern '=' benutzen.
    Kommt gut wenn man sich auch ohne Benutzername/Passwort einlogen kann.

    Ausserdem fehlt der Schutz vor einer SQL-Injection.
    PHP-Code:
    $Query "SELECT  
              * 
              FROM  
              `user`  
              WHERE  
              `nickname` = '"
    .mysql_real_escape_string($nickname)."'  
              AND  
              `passwort` = '"
    .mysql_real_escape_string($passwort)."';"
    Irgendwie übersichtlicher.

    Die Datei heisst wirklich "login.php"?
    Dann frage ich mich wie das Formular es schafft die Daten dorthin zu schicken.

    Und wo prüfst Du überhaupt ob das Formular abgeschickt wurde?

    session_start() wurde ja schon genannt.

    Gruss Dr Dau
     
    Schri-Schra-Schrödi *g*
    mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
    Dinge, die mit Tabellen besser klappen als mit CSS
    Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
    Meine Links zum Thema Linux (Last update: 29.10.2011)
    Kein Busen ist so flach wie das Niveau dieser Party!
    ----
    Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
    ----
    Ich habe 3 Kinder und kein Geld!
    Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)

  5. #5
    Registriert seit
    Oct 2005
    Ort
    Nottuln
    Beiträge
    1.282
    Jetzt, wo ihr's sagt, fällts mir ein :-O
    Das
    PHP-Code:
    session_start(); 
    fehlt natürlich
    Wie konnte ich das vergessen...

    Noch eine Frage:
    Mein Server wurde gehackt, 6 datenbanken, ca. 100 tabellen wurden gelöscht.
    Sollte ich den Anbieter wechseln oder nicht? Das ist jetzt schon das 2. Mal


    MfG
    David
     

  6. #6
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Das kommt darauf an wie der Server gehackt wurde. Wenn das Problem bei Deinen Scripts liegt wird ein Umzug nicht helfen.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  7. #7
    Registriert seit
    Oct 2005
    Ort
    Nottuln
    Beiträge
    1.282
    Zitat Zitat von Dennis Wronka
    Wenn das Problem bei Deinen Scripts liegt wird ein Umzug nicht helfen.
    Das dachte ich mir schon.
    Spaß bei Seite
    Nein, heute morgen wollte ich auf meinen Seiten vorbeischauen, und was war? Alle Seiten wurden von meinem conifxx aus auf porno-seiten umgeleitet, subdomains wurden gelöscht, alle datenbanken waren weg usw. usw

    David
     

  8. #8
    venyl venyl ist offline Mitglied Silber
    Registriert seit
    Jul 2006
    Beiträge
    71
    Alles schön und gut, doch mich intressiert ob das script jetzt mit session_start(); ?
     
    ich rage heraus und gehe in die tiefe.....wenn ich PHP kann :P

  9. #9
    Registriert seit
    Oct 2005
    Ort
    Nottuln
    Beiträge
    1.282
    Zitat Zitat von venyl
    Alles schön und gut, doch mich intressiert ob das script jetzt mit session_start(); ?
    Da fehlt nen Verb

    Jau, jetzt geht es
     

  10. #10
    Avatar von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    6.160
    Blog-Einträge
    4
    Deine Passwörter hast Du dann ja bestimmt schon geändert.....
    Ich würde mal in die Logfiles vom Webserver und vom System gucken..... evtl. kann man daraus schon etwas erkennen.

    Und wie Dennis schon sagt, es kann auch an Deinen Scripten liegen..... wie z.b. mit der schon genannten SQL-Injection.

    Hinzu kommt noch Dein LIKE..... und schon konnte ich mich ohne Benutzername/Passwort einlogen.
    LIKE dient als Zeichenketten-Vergleichsfunktion.
    Vor LIKE kommt der String mit dem verglichen werden soll (in Deinem Fall alle Zeilen aus der Spalte "nickname" bzw. "passwort").
    Nach LIKE kommt der String nach dem gesucht werden soll.
    Da man das %-Zeichen als Ersatzzeichen für jedes beliebige Zeichen nutzen kann, brauchte ich als Benutzername und Passwort also lediglich das %-Zeichen eingeben.
    Und schon wurde in den Spalten "nickname" und "passwort" nach irgend einem beliebigen Zeichen gesucht.
    Nun sind in einer Benutzerverwaltung natürlich auch irgend welche Benutzer eingetragen (welch Wunder ), was dann dazu geführt hat dass auch irgend ein beliebiges Zeichen gefunden wurde.
    Zwangläufig musste mein Login also auch ohne einem mir bekannten Usernamen/Passwort gelingen.

    LIKE könnte bei einer Suchfunktion ganz nützlich sein..... da aber bei einem Login nicht zu erwarten ist dass der User nur einen Teil seines Usernamens und/oder Passworts eingibt, kannst Du getrost auf LIKE verzichten.
     
    Schri-Schra-Schrödi *g*
    mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
    Dinge, die mit Tabellen besser klappen als mit CSS
    Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
    Meine Links zum Thema Linux (Last update: 29.10.2011)
    Kein Busen ist so flach wie das Niveau dieser Party!
    ----
    Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
    ----
    Ich habe 3 Kinder und kein Geld!
    Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)

  11. #11
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Beim Passwort frag ich mich immer: Warum beim Login ueberhaupt an die Datenbank uebergeben?
    Am Anfang gibt der User seinen Usernamen und sein Passwort ein, und wenn alles okay ist soll am Ende die UserID in die Session geschreiben werden.
    Um an die UserID zu kommen muss ich doch eh die User-Daten aus der Datenbank holen, dementsprechend kann man es sich doch sparen das Passwort an diese zu uebermitteln.
    So ungefaehr sieht mein Login aus:
    Code php:
    1
    2
    3
    4
    5
    6
    7
    
    $users=mysql_query("select * from `users` where `username`='".quote_string($_POST['username'])."'");
    $user=mysql_fetch_assoc($users);
    $passwordhash=sha1($_POST['password']);
    if ((!empty($user)) && ($passwordhash==$user['password']))
    {
     $_SESSION['id']=$user['id'];
    }
    Nicht ganz so, aber ungefaehr.
    quote_string() ist uebrigens eine selbst zusammengestrickte Funktion die ungefaehr Beispiel 3 bei mysql_real_escape_string() in der PHP-Doku.

    Zitat Zitat von Dr Dau
    da aber bei einem Login nicht zu erwarten ist dass der User nur einen Teil seines Usernamens und/oder Passworts eingibt, kannst Du getrost auf LIKE verzichten.
    Nicht zu erwarten? User die ueberhaupt ansatzweise auch nur auf die Idee kommen gehoeren oeffentlich gesteinigt.
    Wie Dr Dau schon sagt, LIKE hat bei einem Login absolut nichts verloren.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  12. #12
    Avatar von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    6.160
    Blog-Einträge
    4
    Zitat Zitat von Dennis Wronka
    Beim Passwort frag ich mich immer: Warum beim Login ueberhaupt an die Datenbank uebergeben?
    Stimmt auch wieder..... aus der Sichtweise habe ich es noch garnicht betrachtet.....
    Denn genauso wenig wie es zu erwarten ist dass ein User sich mit halben Benutzernamen/Passwort einlogen kann, ist es auch nicht zu erwarten dass es einen Benutzernamen mehrfach gibt.
    Aber was genau würde es bringen?
    Mehr Sicherheit?
    Mehr Performance?
    Hmm..... *kurz nachdenke*
    Nagut, vergiss meine Frage wieder..... mit der Sicherheit kann ich nachvollziehen..... und die sollte Grund genug sein.
     
    Schri-Schra-Schrödi *g*
    mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
    Dinge, die mit Tabellen besser klappen als mit CSS
    Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
    Meine Links zum Thema Linux (Last update: 29.10.2011)
    Kein Busen ist so flach wie das Niveau dieser Party!
    ----
    Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
    ----
    Ich habe 3 Kinder und kein Geld!
    Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 02.05.09, 18:56
  2. Antworten: 4
    Letzter Beitrag: 20.09.08, 17:04
  3. Antworten: 1
    Letzter Beitrag: 08.06.08, 17:51
  4. Frage zu "Login System mit Sessions"
    Von BlackBestia im Forum PHP
    Antworten: 3
    Letzter Beitrag: 29.01.07, 18:19
  5. Antworten: 15
    Letzter Beitrag: 01.07.02, 15:12