Wie gut ist mein Loginscript ?!

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

  • Wie gut ist mein Loginscript ?!

    Hallo!

    Als ich vor etwa 10 Monaten mit der Programmierung meiner Community Seite begonnen habe ich php mässig noch nicht allzuviel gemacht, nur sowas wie newsscripte, gästebuch usw aber nichts mit login , sessions etc...

    also musste ich mich da erstmal einlesen und habe ein login system gebastelt das bis jetzt eigentlich gut funktioniert, da ich allerdings nie ein anderes beispiel gesehen habe wollte ich die kenner mal fragen wo die schwächen bei meinem script liegen und was ich verbessern sollte/könnte oder ob es so okay ist.

    Beim Login form gibt man email und passwort ein und kann auswählen ob die logindaten gespeichert werden sollen oder nicht, das ganze sieht so aus:
    PHP-Code:
    session_start();
    include (
    'functions.php');
    include (
    'connect.php');

    $return_login=login_right($_POST['email'],md5($_POST['pass']));
    if (
    $return_login!=&& $return_login!="no")
        {
            
    $query="SELECT active FROM user WHERE id='$return_login'";
            
    $result=mysql_query($query);
            
    $aktiv=mysql_fetch_object($result);
            if (
    $aktiv->active==0)
            {
                
    $query="UPDATE user SET active=1 WHERE id='$return_login'";
                
    $insert=mysql_query($query) or die (mysql_error());
            }
            
    $checksum=md5($_POST['pass']);
            if(isset(
    $_POST['forever']))
            {
                
    setcookie (cid,$return_login,time()+60*60*24*365*2);
                
    setcookie (cmd5,$checksum,time()+60*60*24*365*2);
            } else {
                
    setcookie (cid,$return_login,time()+3600);
                
    setcookie (cmd5,$checksum,time()+3600);
            }
            
    $_SESSION['id']=$return_login;
            
    $_SESSION['ip']=$_SERVER['REMOTE_ADDR'];
            
    mysql_close();
            
    $url="/?action=showcar";
            
    gotoURL($url);
        } else
            {
                
    mysql_close();
                
    $url="/?action=login";
                
    gotoURL($url);
            } 
    nachdem alles überprüft wurde werden 2 cookies gespeichert, einmal mit der user id und einmal mit der md5 checksumme des passworts...je nachdem ob man Dauerhaft speichern aktiviert hat oder nicht werden die cookies entweder 1 Stunde oder 2 Jahre gespeichert...ich habe an dieser stelle nichts zum berechnen der sid, der server speichert die session wohl automatisch in einem cookie weil sie per URl nicht übergeben wird und ich sicherhaltshalber Trans id per htaccess unterbunden habe!

    Gut das ist der erste teil, jetzt kommt noch der code der am anfang jeder Seite ausgeführt wird um zu schauen ob der benutzer eingeloggt ist oder nicht:

    PHP-Code:
    if (isset($_COOKIE['cid']) && isset($_COOKIE['cmd5'])) {
        
    $cmd5=$_COOKIE['cmd5'];
        
    $cid=$_COOKIE['cid'];
        
    $query "SELECT pchecksum FROM user WHERE id='$cid'";
        
    $result mysql_query($query) OR die(mysql_error());
        
    $pcheck mysql_fetch_object($result);
        
    mysql_free_result($result);
        if (
    $cmd5==$pcheck->pchecksum) {
            
    $_SESSION['id']=$cid;
            
    $query="SELECT nick,email FROM user WHERE id='".$_SESSION['id']."'";
            
    $result=mysql_query($query);
            
    $user=mysql_fetch_object($result);
            
    $query="SELECT cats FROM forum_mods WHERE user_id='".$_SESSION['id']."'";
            
    $result=mysql_query($query);
            
    $cats=mysql_fetch_object($result);
            
    $jetzt=time();
            
    $query="UPDATE user SET lastvisit='$jetzt' WHERE id='".$_SESSION['id']."'";
            
    $update=mysql_query($query);
            
    $_SESSION['nick']=$user->nick;
            
    $_SESSION['email']=$user->email;
            
    $_SESSION['cats']=$cats->cats;
        } else {
                    
    $_SESSION['id']=0;
                    
    $_SESSION['cats']=0;
                }
        
    } else {
                
    $_SESSION['id']=0;
                
    $_SESSION['cats']=0;
            } 
    als erstes wird geprüft ob die cookies existieren, dann wird überprüft ob die gespeicherte pw Prüfsumme mit der in der Datenbank übereinstimmt, wenn ja werden relevante user daten in der session gespeichert, wenn nicht wird die userid auf 0 gesetzt (ich überprüfe damit ob der user eingeloggt ist oder nicht).
    So das wars auch schon, würde mich freuen wenn da jemand was zu sagen könnte!
    Das System funktioniert so natürlich nur mit cookies, das ist aber auch gewollt da mit Transid zuviele sicherheitsrisiken birgt und sich bis jetzt auch noch niemand beschwert hat (habe schon über 200 mitglieder).
    na dann bin ich mal gespannt

    Wünsche noch einen schönen Sonntagabend!

    gruß
    Arne

  • #2
    sieht eigentlich ganz gut aus. nur: (jetzt kommt )
    - warum machst du mal mysql_free_result mal wieder nicht
    - was macht $return_login, warum 2 versch. Rückgabewerte, warum wird
    user active nicht gleich darin überprüft und gesetzt
    - warum übergibst du die SID nicht manuell weiter, für User die kein
    Cookies haben möchten, soviel zusätzliche Arbeit ist es ja nicht.

    Kommentar


    • #3
      ja kleine schönheitsfehler
      aber ohne cookies würde das ganze system ja nicht funktionieren...

      aud sid verzichte ich weil:
      - das link kopieren mit SID dazu führen könnte das andere eingeloggt sind
      - suchmaschinen freuen sich nicht so über SIDs in der URL

      naja aber hauptsächlich wegen der sicherheitssache...meine user sind nicht umbedingt die pc/internet cracks, da könnte es schonmal vorkommen das jemand jemand anderem ne url mit SID schickt und dann hat man den salat...
      klar kann man das wieder überprüfen aber ips usw ändern sich ja auch ständig, das is mir alles zu unsicher.

      die sachen die du genannt hast werde ich demnächst mal berücksichtigen!

      danke für die antwort!

      Kommentar


      • #4
        gegefrage: warum postetest du im falschen forum? .)

        *verschieb*
        h.a.n.d.
        Schmalle

        http://impressed.by
        http://blog.schmalenberger.it



        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
        ... nur ohne :-)

        Kommentar

        Lädt...
        X