Loginscript(idee) frage: ist es so sicher?

eternitysoft

Mitglied
Loginscript(idee) frage: kleines problem

Hallo brauche da ein Loginscript für meine hp und wollte es mir selber proggen (cookies+sessions)
wollte mal fragen ob das so gehen würde und ob das sicher wäre
wollte das so ungefähr proggen (konzept)
und zwar geht es mir erstmal nur um die abfrage ob eingeloggt oder nicht das wollte ich dann so machen

Code:
+abfrage ob cookies existieren 
    +wenn ja dann abfragen ob pw cookie mit dem pw aus der db stimmt 
     +wenn ja dann session setzen mit daten aus der db

code grob ohne db abfragen

PHP:
<?PHP
   session_start (); 
   if (!$_COOKIE["username"])&&(!$_COOKIE["pw"])
   {
      if ($_COOKIE["pw"] ==$pw)
      {
   	  $_SESSION["user_id"] = $data["id"];
   	  $_SESSION["user"] = $data["user"];
   	  $_SESSION["email"] = $data["email"];
   	  $_SESSION["style"] = $data["style"];
  	   $_SESSION["eingeloggt"] = 1;
      }
      else
      {
   	 normaler seiten inhalt
      }
   }
   else
   {
   normaler seiten inhalt
   }
   ?>

und das würde ich dann halt in jeder datei reinhauen
wie gesagt wollte mal wissen ob das einigermaßen sicher ist

bzw würde ich dann zum editieren dann die abfrage machen

PHP:
  <?PHP
  if ($_SESSION["eingeloggt"] == 1)
  {
  echo " du kannst editieren";
  }
  else
  {
  echo " du kannst nicht editieren";
  }
  ?>
mfg
et
 
Zuletzt bearbeitet:
Das steht in meiner index.php um zu testen ob ein Cookie gesetzt ist:
PHP:
if ((isset($_COOKIE['id'])) && (isset($_COOKIE['password'])) && (!isset($_SESSION['id'])))
 {
  $id=$_COOKIE['id'];
  $password=$_COOKIE['password'];
  $users=mysql_query("select * from users where id='$id'",$db);
  $user=mysql_fetch_assoc($users);
  if ($user['password']==$password)
   {
    $_SESSION['id']=$id;
   }
 }

Und das ist meine login.php
PHP:
<?php
$changesection="main";
if (isset($_POST['login']))
	{
		$login=$_POST['login'];
	}
if (isset($login))
	{
		if (isset($_POST['username']))
			{
				$username=$_POST['username'];
			}
		if (isset($_POST['password']))
			{
				$password=$_POST['password'];
			}
		if (isset($_POST['savelogin']))
			{
				$savelogin=$_POST['savelogin'];
			}
		if ((!empty($username)) && (!empty($password)))
			{
				$users=mysql_query("select * from users where username='$username'",$db);
				$user=mysql_fetch_assoc($users);
				if ($user)
					{
						$cryptedpassword=sha1($password);
						if ($cryptedpassword==$user['password'])
							{
								if (isset($savelogin))
									{
										setcookie("id",$user['id'],time()+2592000);
										setcookie("password",$cryptedpassword,time()+2592000);
									}
								$_SESSION['id']=$user['id'];
								mysql_query("update sessions set userid='".$user['id']."' where sessionid='$sessionid'",$db);
								header("Location:index.php".$sessionparm);
							}
						else
							{
								$changes[$changesection].='Invalid password';
							}
					}
				else
					{
						$changes[$changesection].='Invalid username';
					}
			}
		else
			{
				if (!$username)
					{
						$changes[$changesection].='No username<br>';
					}
				if (!$password)
     {
      $changes[$changesection].='No password<br>';
     }
   }
 }
$changes[$changesection].='<form method="post" action="index.php?subsite=login.php'.$sessionparm_link.'">';
$changes[$changesection].='<table class="vistable">';
$changes[$changesection].='<tr><td>Username:</td><td><input type="text" name="username"></td></tr>';
$changes[$changesection].='<tr><td>Password:</td><td><input type="password" name="password"></td></tr>';
$changes[$changesection].='</table>';
if ($session['cookies']=="1")
 {
  $changes[$changesection].='Stay logged in:';
  $changes[$changesection].='<input type="checkbox" name="savelogin"><br>';
 }
$changes[$changesection].='<input type="submit" name="login" value="Login">';
$changes[$changesection].='</form>';
?>
 
sehe ich das falsch oder ist das vom grundaufbau gleich ? ^^

bzw kann man das auch so machen?

PHP:
  <?PHP
  session_start (); 
 
 if ($_SESSION["eingeloggt"] != 1)
 {
   if (!$_COOKIE["username"])&&(!$_COOKIE["pw"])
  {
	 if ($_COOKIE["pw"] ==$pw)
	 {
		$_SESSION["user_id"] = $data["id"];
		$_SESSION["user"] = $data["user"];
		$_SESSION["email"] = $data["email"];
		$_SESSION["style"] = $data["style"];
 	   $_SESSION["eingeloggt"] = 1;
	 }
	 else
	 {
	   normaler seiten inhalt
	 }
  }
  else
  {
  normaler seiten inhalt
  }
 }
 
  ?>
damit er sich die abfrage laufend beim neu aufrufen sparen tut und so weniger abfragen endstehen?
 
Ich denke es ist auf jeden Fall sinnvoller vor dem pruefen des Cookies zu gucken ob der User bereits eingeloggt ist. Dann kannst Du Dir das naemlich sparen.
Das geschieht bei mir in der index.php, dies ist sozusagen die wichtigste Datei meiner Website, denn alles andere wird dort includet.

Ich setz bei mir jedoch noch $_SESSION['eingeloggt'] sondern setze die UserID in die Session. Das wird auch in einigen anderen Scripts so benoetigt, da ich anhand dessen den User identifiziere.
Dies ist auch die einzige Session-Variable die ich setze.
 
PHP:
   <?php 
   session_start (); 
   
   $time_start = microtime(true);
   include ('config.php');
   include('function.php');
   include ('db/db_connect.php');
   
   if ($_SESSION["eingeloggt"] != 1)
   {
      if (isset$_COOKIE["username"])&&(isset$_COOKIE["pw"])
     {
   	 if ($_COOKIE["pw"] ==$pw)
   	 {
   		$_SESSION["user_id"] = $data["id"];
   		$_SESSION["user"] = $data["user"];
   		$_SESSION["email"] = $data["email"];
   		$_SESSION["style"] = $data["style"];
   		$_SESSION["eingeloggt"] = 1;
 		$style=$_SESSION["style"];
   		$login = '<a href="logout.php">logout</a>';
   		$einstellung = '<a href="einstellung.php">einstellung</a>';
   		$projekte = '<a href="projekte.php">projekte</a>';
   		$pns = '<a href="pns.php">pns</a>';
   		}
   	 else
   	 {
   		// normaler seiten inhalt
 		 $style="grey";
   		$login = '<a href="login.php">login</a>';
   		$einstellung = '';
   		$projekte = '';
   		$pns = '';
   	 }
     }
     else
     {
    // normaler seiten inhalt
 		 $style="grey";
     $login = '<a href="login.php">login</a>';
     $einstellung = '';
     $projekte = '';
     $pns = '';
     }
   }
   
   
   //code
 					 //index tpl parsen
 					 $Body = new CTemplate();
 					 $Body->Load($style."/template/index.tpl");
 		 		 $Body->Replace("login",$login);
 		 		 $Body->Replace("einstellung",$einstellung);
 		 		 $Body->Replace("projekte",$projekte);
 		 		 $Body->Replace("pns",$pns);
 					 $Body->Display();
   
   ?>

in etwa so ?
ist jetzt grob da kommt noch seiten code dazu und die db abfragen hab ich jetzt mal mit absicht weg gelassen
 
Zuletzt bearbeitet:
Du koenntest die beiden IFs um zu pruefen ob der User bereits eingeloggt ist und ob die Cookies existieren zu einem IF zusammenfassen.
So wie es in meinem Code zu sehen ist.
 
PHP:
  if (isset($_COOKIE["username"]))&&(isset($_COOKIE["pw"])) && ($_SESSION["eingeloggt"] != 1)
   {
 	 if ($_COOKIE["pw"] ==$pw)
 	 {
 		$_SESSION["user_id"] = $data["id"];
 		$_SESSION["user"] = $data["user"];
 		$_SESSION["email"] = $data["email"];
 		$_SESSION["style"] = $data["style"];
 		$_SESSION["eingeloggt"] = 1;
 		$login = '<a href="logout.php">logout</a>';
 		$einstellung = '<a href="einstellung.php">einstellung</a>';
 		$projekte = '<a href="projekte.php">projekte</a>';
 		$pns = '<a href="pns.php">pns</a>';
 		}
 	 else
 	 {
 		// normaler seiten inhalt
 		$login = '<a href="login.php">login</a>';
 		$einstellung = '';
 		$projekte = '';
 		$pns = '';
 	 }
   }
   else
   {
  // normaler seiten inhalt
   $login = '<a href="login.php">login</a>';
   $einstellung = '';
   $projekte = '';
   $pns = '';
   }
so ?
 
Ja.
Denn wenn
PHP:
if ($x==10)
 {
   if ($y==20)
    {
     //tu was
    }
 }
ist ja das gleiche wie:
PHP:
if (($x==10) && ($y==20))
 {
  //tu was
 }

Nur, dass das zweite kuerzer und einfacher zu lesen ist.
 
Zurück