Login script sicher?

C

Clownish

none
Hey ich habe 2 Loginscripte in Php geschrieben, einmal Session basierend, einmal Cookie basierend. Jetzt wüsste ich gerne welches von beiden wie sicher ist, und welchem ich den Vorzug geben sollte;).

Sessions:

PHP:
<?php
   error_reporting(E_ALL);
   session_start();
    
   require_once('config.php');
   
  function randomkeys($length)
  {
   $pattern = "123456789abcdefghijklmnopqrstuvwxyzQWERTZUIPASDFGHJKLYXCVBNM";
   for($i=0;$i<$length;$i++)
   {
     $key .= $pattern{rand(0,59)};
   }
   return $key;
  }


	 mysql_connect(HOST,USER,PASS) && mysql_select_db(DB);
    $result = mysql_query('SELECT Name, Password, cookie FROM users WHERE ID = 1') OR die(mysql_error());
    $row = mysql_fetch_array($result);
    
    $userpass = $_POST['userpass'];
    $username = $_POST['username'];
    mysql_free_result($result);
        
    if($_SESSION['login'] == MD5($row['cookie'].$row['Name'].$_SERVER['REMOTE_ADDR'])) 
    {
        echo 'Logged In';
    } 
    else 
    {
                                
        if ($username == $row['Name'] && MD5($userpass) == $row['Password'])
        		{
        		
        		 	$atm = randomkeys(32);
        			$sessiondata = MD5($atm.$username.$_SERVER['REMOTE_ADDR']);
        			$_SESSION['login'] = $sessiondata;
        			mysql_query("UPDATE users SET cookie = '".$atm."' WHERE id='1';"); 
        			echo 'Logged In, Cookie set';
        		
        		}
        		else
        		{
?>
Bitte loggen sie sich ein:<br><br>
				<form action="<?php echo $SCRIPT_NAME ?>" method="post">
					<input type="text" name="username" /><br>
					<input type="password" name="userpass" /><br>
					<input type="submit" />								
				</form>
<?php       
die; 		
        		}
        
		   
        
    }
  
?> 
Hier gehts weiter

Und das gleiche mit Cookies:

PHP:
<?php
    //error_reporting(E_ALL);
    
   require_once('config.php');
   
  function randomkeys($length)
  {
   $pattern = "123456789abcdefghijklmnopqrstuvwxyzQWERTZUIPASDFGHJKLYXCVBNM";
   for($i=0;$i<$length;$i++)
   {
     $key .= $pattern{rand(0,59)};
   }
   return $key;
  }


	 mysql_connect(HOST,USER,PASS) && mysql_select_db(DB);
    $result = mysql_query('SELECT Name, Password, cookie FROM users WHERE ID = 1') OR die(mysql_error());
    $row = mysql_fetch_array($result);
    
    $userpass = $_POST['userpass'];
    $username = $_POST['username'];
    mysql_free_result($result);
        
    if(isset($_COOKIE['login']) && $_COOKIE['login'] == MD5($row['cookie'].$row['Name'].$_SERVER['REMOTE_ADDR'])) 
    {
        echo 'Logged In';
    } 
    else 
    {
                                
        if ($username == $row['Name'] && MD5($userpass) == $row['Password'])
        		{
        		ob_start();
        		 	$atm = randomkeys(32);
        			$keks = MD5($atm.$username.$_SERVER['REMOTE_ADDR']);
        			setcookie('login', $keks);
        			mysql_query("UPDATE users SET cookie = '".$atm."' WHERE id='1';"); 
        			echo 'Logged In, Cookie set';
        		ob_end_flush();
        		}
        		else
        		{
?>
Bitte loggen sie sich ein:<br><br>
				<form action="<?php echo $SCRIPT_NAME ?>" method="post">
					<input type="text" name="username" /><br>
					<input type="password" name="userpass" /><br>
					<input type="submit" />								
				</form>
<?php       
die; 		
        		}
        
		   
        
    }
  
?> 
Hier gehts weiter

Wäre über Verbesserungsvorschläge etc dankbar.

Lg,
Fabian
 
Warum kombinierst du nicht beides ? unnd nimm die IP mit dazu!
 
okay... wie soll ich denn dann Sessionklau verhindern? Welches anderes sicheitsmerkmal als die ip gibt es denn sonst?
 
okay... wie soll ich denn dann Sessionklau verhindern? Welches anderes sicheitsmerkmal als die ip gibt es denn sonst?
du könntest die browser-kennung zusammen mit der ip auswerten. das gibt ein bisschen mehr sicherheit (schon den ie hat je nach variante sicher 15 verschiedene kennungen (aol-version, media-center-pc,...)
wird nicht viel bringen, aber ein bisschen.
 

Ähnliche Themen

Php mysql suchausgabe

CentOS 6.3 RADIUS - Keine Verbindung möglich

Variablen in Session speichern

dovecot und postfix Konfiguration Problem

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben