Session Funktionen sicher?

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

  • Session Funktionen sicher?

    Code:
    <?php
    
    /* Funktion zum Einloggen */
    function login($id, $password) {
    	global $db;
    
    	if(empty($id) OR empty($password)) {
    		return FALSE;
    	}
    
    	setcookie("cook_userid", $id, time() + 30 * 24 * 60 * 60);
    	setcookie("cook_password", $password, time() + 30 * 24 * 60 * 60);
    
    	$sql = "SELECT * FROM wpc_user WHERE id = '$id' AND password = '$password'";
    	if(!$db->query($sql)) {
    		return FALSE;
    	}
    	
    	$sql = "SELECT * FROM wpc_session WHERE user = '$id'";
    	if($db->query($sql)) {
    		return TRUE;
    	}
    
    	$session = md5($id.$password."logged_in");
    	
    	$sql = "INSERT INTO wpc_session (user, session) VALUES ('$id', '$session')";
    	$db->query($sql);
    	
    	return TRUE;
    }
    
    /* Funktion zum Prüfen, ob User eingelogged ist */
    function logged_in($session) {
    	global $db, $cook_userid, $cook_password;
    
    	if(empty($id)) {
    		return FALSE;
    	}
    
    	$sql = "SELECT * FROM wpc_user WHERE id = '$cook_userid' AND password = '$cook_password'";
    	if($db->query($sql)) {
    		$session = md5($cook_userid.$cook_password."logged_in");
    		
    		$sql = "SELECT * FROM wpc_session WHERE user = '$cook_userid'";
    		if($db->query($sql)) {
    			return TRUE;
    		}
    		
    		$sql = "INSERT INTO wpc_session (user, session) VALUES ('$id', '$session')";
    		$db->query($sql);
    	
    		return TRUE;
    	}
    	
    	$sql = "SELECT * FROM wpc_session WHERE session = '$session'";
    	if($db->query($sql)) {
    		return TRUE;
    	}
    	
    	return FALSE;
    }
    
    /* Funktion zum ausloggen */
    function logout($session) {
    	global $db;
    
    	setcookie("cook_userid", 0, time() + 30 * 24 * 60 * 60);
    	setcookie("cook_password", 0, time() + 30 * 24 * 60 * 60);
    
    	$sql = "DELETE FROM wpc_session WHERE session = '$session'";
    	$db->query($sql);
    }
    
    ?>
    Dies sind die Funktionen, die in meiner Boardsoftware die Sessions verwalten sollen. Jedoch stehe ich schon seit einigen Tagen einfach auf dem Schlauch, also frage ich hier: Ist dieses System überhaupt sicher? Bedingung ist natürlich auch, dass der Session - Hash von Seite zu Seite immer weiter übergeben wird.

    Doerr

  • #2
    und wo startest du deine session?

    kann zwar auch dadran liegen, dass du nich die php-tags benutzt hast, aber ich seh bloß cookies
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Ich benutze nicht die eigentlichen PHP Sessions sondern arbeite mit Einträgen in einer Datenbank.

      Doerr

      Kommentar


      • #4
        Hi,

        habe Dein Script nur kurz überflogen.

        Ich würde ein Passwort nicht in einem Cookie speichern.

        Kommentar


        • #5
          Und woher soll ich sonst wissen, ob man sich das Cookie nicht einfach selbst gesetzt hat?

          Doerr

          Kommentar


          • #6
            ich kann mir ein cookie ja immer noch selbst setzen, wenn ich als passwort im cookie sowas eintrage:
            Code:
            [b]' or password!=''[/b] (sinngemäß)
            ich würde dir echt empfehlen, sessions zu benutzen
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Hi,

              Und woher soll ich sonst wissen, ob man sich das Cookie nicht einfach selbst gesetzt hat?
              Also ich würde die $session die ja mit "$session = md5($id.$password."logged_in");" erzeugst in einem Cookie setzten. Und diese $session würde ich dann mit md5 (uniqid (rand())); erzeigen, damit diese einmalig ist.
              Dann kannst Du in in der Funktion loggend_in Abfragen ob die session schon in der DB wpc_session vorhanden ist.

              Armin

              Kommentar


              • #8
                @BielWeb: Deine Idee habe ich nicht ganz verstanden. Könntest Du das noch einmal genauer erklären.

                @mrhappiness: Ich sitze nun schon einige Tage an diesen 3 winzigen Funktionen und hatte einfach die Schnauze voll von den PHP Sessions, weil einfach nichts ging.

                Ganz nebenbei: Wie machen es Boardsysteme wie das vB, dass die SessionIDs nicht immer in der Adressleiste übergeben wird?

                Doerr

                Kommentar


                • #9
                  Original geschrieben von Doerr
                  Ganz nebenbei: Wie machen es Boardsysteme wie das vB, dass die SessionIDs nicht immer in der Adressleiste übergeben wird?
                  indem sie die session-id in einem cookie ablegen.

                  und zwar nur die session-id, und kein passwort, noch dazu unverschlüsselt!
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Hallo.
                    Ganz nebenbei: Wie machen es Boardsysteme wie das vB, dass die SessionIDs nicht immer in der Adressleiste übergeben wird?
                    Per Cookie. Entweder nutzten diese Systeme die Funktion sesseion_start etc. oder die haben ein eigenes Sessionsystem geproggt wie Du es nun auch vor hast.

                    @BielWeb: Deine Idee habe ich nicht ganz verstanden. Könntest Du das noch einmal genauer erklären.
                    Ich werds versuchen Hier ein kleines Beispiel
                    PHP-Code:
                    <?php

                    /* Funktion zum Einloggen */
                    function login($id$password) {
                        global 
                    $db;
                        
                    // Überprüfen ob ID und Passwort eingeben wurden
                        
                    if(empty($id) OR empty($password)) {
                            return 
                    FALSE;
                        }
                        
                    // Überprüfen ob Benuterdaten in der DB
                        
                    $sql "SELECT * FROM wpc_user WHERE id = '$id' AND password = '$password'";
                        
                    $results $db->query($sql);
                        
                    $user mysql_fetch_array($results);
                        if(empty(
                    $user)) {
                            return 
                    FALSE;
                        }
                        
                    // Cookie setzten und Eintrag in wpc_session DB wenn User vorhanden
                        
                    $session md5($id.$password."logged_in");
                        
                    setcookie("cook_userid"$sessiontime() + 30 24 60 60);
                        
                    $sql "INSERT INTO wpc_session (user, session) VALUES ('$id', '$session')";
                        
                    $db->query($sql);
                        return 
                    TRUE;
                    }

                    /* Funktion zum Prüfen, ob User eingelogged ist */
                    function logged_in($session) {
                        global 
                    $db$cook_userid$cook_password;
                        
                    //Überprüfen ob Cookie vorhanden
                        
                    if (!empty($_COOKIE['cook_userid'])){
                            
                    // Überprüfen ob Cookie_ID in der DB
                            
                    $sql "SELECT * FROM wpc_user WHERE id = '$_COOKIE[cook_userid]'";
                            
                    $results $db->query($sql);
                            
                    $user mysql_fetch_array($results);
                            if (empty(
                    $user))
                                return 
                    FALSE
                            
                    else
                                return 
                    TRUE;
                        }
                        else
                            return 
                    FALSE
                    }

                    /* Funktion zum ausloggen */
                    function logout($session) {
                        global 
                    $db;

                        
                    setcookie("cook_userid"0time() + 30 24 60 60);
                        
                    setcookie("cook_password"0time() + 30 24 60 60);

                        
                    $sql "DELETE FROM wpc_session WHERE session = '$session'";
                        
                    $db->query($sql);
                    }

                    ?>
                    Hier besteht am jetzt nicht die ID per URL weiterzugeben.

                    Kommentar


                    • #11
                      Okay, da mir nun viele dazu geraten haben, die PHP Sessions zu verwenden, habe ich meine Funktionen umgeschrieben. Könntet Ihr jetzt noch einmal drüber schauen, ob sich nicht grobe Schnitzer eingeschlichen haben? Und außerdem: Was schreibe ich jetzt in die Cookies (Cookie Unterstützung ist noch nicht eingebaut), wenn das Passwort nicht hinein soll. Ganz nebenbei: Schreibt nicht sogar das vB die Passwörter in die Cookies?
                      Hier also der Code:
                      PHP-Code:
                      /* Funktion zum Einloggen */
                      function login($id$password) {
                          global 
                      $db;
                          
                      session_start();

                          if(empty(
                      $id) OR empty($password)) {
                              return 
                      FALSE;
                          }

                          
                      $sql "SELECT * FROM wpc_user WHERE id = '$id' AND password = '$password'";
                          if(!
                      $db->query($sql)) {
                              return 
                      FALSE;
                          }

                          
                      session_register('id');
                          return 
                      TRUE;
                      }

                      /* Funktion zum Prüfen, ob User eingelogged ist */
                      function logged_in() {
                          if(!
                      session_is_registered('id')) {
                              return 
                      FALSE;
                          }

                          echo 
                      $PHPSESSID;
                          return 
                      TRUE;
                      }

                      /* Funktion zum ausloggen */
                      function logout() {
                          
                      session_start();
                          
                      session_destroy();

                      Doerr

                      Kommentar

                      Lädt...
                      X