SID überpüfen

heikomi

Erfahrenes Mitglied
Guten Abend,
ich hab eine Page, die mit Frames arbeitet. Nun möchte ich aber verhindern, das man einzelne Seiten aufruft.

In jeder *.PHP Datei gebe ich am anfang diesen Code ein:
PHP:
<?php
session_start();
$sidvergl1 = $_SESSION['snr'];
$sidvergl2 = session_id();

if ($sidvergl1 != $sidvergl2)
{
  echo "Sie haben keine Rechte diese Seite zu besuchen.\n";
  exit();
 }
$_SESSION['snr'] = session_id();

Die Variable $_SESSION['snr'] wird in der index.php festgelegt.

Dennoch kann ich einzelne Seiten ansteuern :confused:

Hat wer eine Idee?

LG Heiko
 
Hi Gumbo,
soll ja auch so sein. Nur wenn ich jetzt im IE einen weiteren Reiter aufmache und dort eine beliebige PHP Datei aufrufe, zeigt er die an und das soll so icht sein.

Das gleich tritt auch auf, wenn ich statt der SID jeder Seite eine Zahl gebe und die in $_SESSION[xyz] schreibe und dann den Vergleich mache, ob ein Wert != 0 vorliegt.

Kann man das irgendwie anders gestalten?

LG Heiko
 
Du könntest einen einmal gültigen Anfrageschlüssel erzeugen, somit ist keine Parallelität möglich. Beispielsweise:
PHP:
<?php

	ob_start();
	session_start();
	$rid = substr(base64_encode(md5(uniqid(rand()), true)), 0, 8);
	output_add_rewrite_var('rid', $rid);

	if (isset($_SESSION['rid']) && (!isset($_REQUEST['rid']) || $_SESSION['rid'] != $_REQUEST['rid'])) {
		echo 'Anfrage ungültig';
	}
	$_SESSION['rid'] = $rid;
Dafür muss dann aber session.use_trans_sid aktiviert werden. Außerdem ist damit auch das Neuladen der Seite nicht mehr möglich.
 
Du kannst das System noch erweitern, dass beispielsweise die letzten beiden Anfrageschlüssel gespeichert werden. Dann ist auch das Neuladen möglich:
PHP:
if (isset($_SESSION['rid'])) {
	if (isset($_REQUEST['rid'])) {
		if ($_SESSION['rid'] == $_REQUEST['rid']) {
			$_SESSION['last-rid'] = $_SESSION['rid'];
		} else {
			if (!isset($_SESSION['last-rid']) || $_SESSION['last-rid'] != $_REQUEST['rid']) {
				echo 'Anfrage ungültig';
			}
		}
	} else {
		echo 'Anfrage ungültig';
	}
}
$_SESSION['rid'] = $rid;
 
Zurück