Session sichern

Hallo zusammen

Ich hatte bereits einen Thread eröffnet, aber jetzt habe ich ein konkreteres Problem... und zwar ist mein Session handling total unsicher...

die index.php sieht folgendermassen aus:

Code:
session_start();
$logout = $_GET['logout'];
if($logout == 1)
  {
    session_regenerate_id();
    session_destroy();
  }
$Sess_Id = $_SESSION['Session_Id'];
$Sess_eingeloggt = $_SESSION['eingeloggt'];
$Sess_User_Id = $_SESSION['User_Id'];
$Sess_User_Name = $_SESSION['User_Name'];
$Sess_User_Vorname = $_SESSION['User_Vorname'];

die login.php wird mittels include in die index.php eingefügt und sieht folgendermassen aus:

Code:
$EMail = $_POST["EMail_login"];
$Passwort = $_POST["Passwort_login"];
if(get_magic_quotes_gpc()) 
  {
    $Passwort = stripslashes($_POST["Passwort_login"]);
    $EMail = stripslashes($_POST["EMail_login"]);
  } 
else 
  {
    $EMail = $_POST["EMail_login"];
    $Passwort = $_POST["Passwort_login"];
  }
if($EMail && $Passwort)
  {
    $Query = sprintf("select * from benutzer where EMail = '%s'",
    mysql_real_escape_string($EMail));
    $Eintragen = mysql_query($Query);
    $row = mysql_fetch_row($Eintragen);
    if($row[1] == md5($Passwort))
      {
        $_SESSION['Session_Id'] = session_id();
        $_SESSION['User_Id'] = $row[0];
        $_SESSION['User_Name'] =  $row[3];
        $_SESSION['User_Vorname'] = $row[4];
        $Sess_Id = $_SESSION['Session_Id'];
        $Sess_User_Id = $_SESSION['User_Id'];
        $Sess_User_Name = $_SESSION['User_Name'];
        $Sess_User_Vorname = $_SESSION['User_Vorname'];
      }
  }

ich dachte das sei so einigermassen sicher, habe aber einmal zum spass ein kleines Script geschrieben das ich hack.php nannte und das sieht folgendermassen aus:

Code:
<?php
session_start();
$_SESSION['Session_Id'] = session_id();
?>
<form action="index.php" method="post">
<input type="submit" name="submit" value="absenden" />
</form>

um zu prüfen ob jemand eingeloggt ist verwende ich jeweils
Code:
$Sess_Id == session_id()
weil die $Sess_Id ja nur gesetzt werden sollte, wenn das Passwort richtig eingegeben wurde... zu meinem entsetzen bin ich aber mittels diesen "hacks" auch eingeloggt... kann mir irgendjemand einen tipp geben wie ich verhindern kann, dass sich nicht andere Personen mittels so einem scriptlein zugang in den registrierten bereich verschaffen??
 
Sicherheitstechnisch gibt es hier wenig bedenken.
Die Session wird Serverseitig gespeichert und steht auch nur dort zur Vfg. Dein ausführendes Script (hack.php) funktioniert, weil es auf dem gleichen Server liegt, wie das auszuführende script (index.php). Und wenn ein Hac^W böser Mensch zugriff auf dein Dateisystem hat um diese Datei dort zu speichern, ist eh alles zu spät!
 
Ein Angreifer könnte einem Nutzer einen Link mit Session-ID zuweisen. Daher nach dem Login, beim Laden, oder sonst wo session_regenerate_id() verwenden. (Nach dem Logout ist es denke ich nicht mehr sehr sinnvoll die ID neu zu generieren?! X( )
 
Hallo,
lol die Session ID in einer Session abspeichern...


Wie macht man dies nun sicher? so:
PHP:
<?php
session_start();

if(isset($_SESSION['User_Id']))
  //Er ist eingelogt
else
  //Logg dich erstmal ein!
?>

Da die Session User_Id nur gesetzt ist/wird, wenn das PW stimmt (und User_Id i.d.R. nicht 'null' ist), kann man nur reinkommen, wenn man sich auch eingeloggt hat.

PS: Prefixe für die Sessions macht mehr Sinn als für Variablen, also lieber:
$User_Id = $_SESSION['Sess_User_Id'];
ansatt so wie du es bisher gemacht hast
 
alles klar, habe alles so geändert, wie ihr geschrieben habt... ich und PHP sind noch nicht ganz so ein dolles Team ;)

kann von mir aus geclosed werden... danke euch...!
 
Zurück
Oben