Sicherheitsproblem mit Sessions

CarpeNoctem

Grünschnabel
Hey ihr

Habe aus Jucks einen Sicherheitscheck bei meiner Seite gemacht und bin erschrocken als ich folgendes festgestellt habe:

Es gibt Seiten, bei denen ich mit
PHP:
if($SESSION_ID!=""){
eine Seite anzeigen oder eben eine else-Meldung bringe, wenn der User nicht eingeloggt ist. Jetzt habe ich mal in der Adresszeile die Variable
HTML:
index.php?SESSION_ID = 1684
eingefügt und prompt wurde die Seite angezeigt, obwohl ich mich gar nie einloggen musste.

Wie muss die if-Abfrage lauten, damit ich wirklich nur dann Zugang zur Seite habe, wenn ich mich eingeloggt habe und folglich eine Session läuft?

Danke für eure Hilfe.
 
Dein Quellcode ist ja generell falsch, denn $SESSION_ID ist nicht $_GET['SESSION_ID']! Siehe register_globals im Manual!

Sessions in PHP
Erstmal muss auf jeder Seite
PHP:
session_start()
ausgeführt werden, damit die Session erstellt & weitergegeben wird. Du kannst dann der Session neue Variablen hinzufügen, z.B.
PHP:
$_SESSION['user_id'] = '1'
Somit wüsstest du schonmal, dass wenn jemand eingeloggt ist, die UserID '1' hat. Das sollte man dann am besten ersetzen durch die UserID aus einer Datenbank.

Auf deiner Seite solltest du dann folgendes im Kopfbereich haben:
PHP:
<?php
session_start();

if(!isset($_SESSION['user_id'] && !empty($_SESSION['user_id']))
{
    header('Location: login_form.php');
}

// Die Seite die Angezeigt werden soll
Das ganze solltest du dann natürlich auf diene Bedürfnisse anpassen. Das Snippet kann man auch in eine Datei auslagern und per include() auf jeder Seite hinzufügen, so dass man den Code nur an einer Stelle hat.


Gruß Radhad
 
Hallo Radhad
Danke für deine Antwort.

Folgendes:

Mittels session_register, teile ich dem Script mit, welche Session-Variablen definiert werden. Anschliessend wird aus der DB ausgelesen und mit
PHP:
$SESSION_ID=$ID;
bekommt $SESSION_ID die ID aus der DB zugeteilt.

Das Ganze läuft einwandfrei, auch mit $SESSION_ID klappt alles, aber was mich jetzt wunder nimmt, besteht ein wesentlicher Unterschied zwischen $_SESSION und $SESSION? Was ich mir vorstellen kann, ist, dass man dann über die Adresszeile die Session nicht mehr ansprechen bzw. definieren kann.
 
$_SESSION ist eine superglobale Variable von PHP.
Siehe auch: Vordefinigerte Variablen

$SESSION wäre ganz einfach eine Variable.

Weiterhin ist die Funktion [phpf]session_register[/phpf] "deprecated", also veraltet, und sollte nicht mehr benutzt werden. Lieber solltest du, wie Radhad sagte, direkt mit dem superglobalen Session Array $_SESSION arbeiten.

php.net gibt dir auf ihrer Seite über Session Funktionen einen Überblick über die Funktionen und wie man sie anwenden sollte.
 
Also die Standard-PHP Session wird immer mit $_SESSION angesprochen.

Erstell dir mal ein kleines Beispiel-Script mit folgendem Inhalt:

PHP:
<?php
session_start();
if(!isset($_SESSION['username']) || $_SESSION['user_agent'])
{
  $_SESSION['username'] = 'Testuser';
  $_SESSION['user_agent'] = $_SERVER['USER_AGENT'];
  print('Session vars written to session-cookie PHPSESSID');
}
$_SESSION['timestamp'] = time();

echo '<pre><b>'.session_id().'</b><br />';
var_dump($_SESSION);
echo '</pre>';
;
 
Zurück