WiMu: IP-Addresse als session_name()

Beitrag lesen

Hallo nochmal,

also wahrscheinlich ist das Ganze wirklich eine Schnapsidee ... aber ich glaube, ihr habt mich (trotzdem vielen Dank für die Antworten) gründlich missverstanden (meine Schuld, da wohl nicht präzise genug).

Er könnte einen zweiten Cookie setzen für den Sessionnamen. So kann dann jeder Client einen eigenen Sessionnamen haben.

Genau den zweiten cookie wollte ich mir eben ersparen, indem ich einfach den ersten nach der IP benenne.

Sinn des Ganzen sollte ja sein, dass man sich nicht einfach so das cookie kopieren und so den Zugang erschleichen kann, da das cookie mit einer überschaubaren Anzahl an clients (diejenigen, die über entsprechende IP verfügen) verknüpft ist. Natürlich wird sowohl der Session-Name, als auch die Session selbst geprüft. Die Session wird erst dann gestartet, wenn sich der Benutzer mit seinem Usernamen und zugehörigem Passwort einloggt und die Überprüfung findet nur dann statt, wenn PHP das nach der IP benannte cookie findet.

Das Login-Script sieht so aus (quick-and-dirty ... $_POSTs werden noch escaped; username und passwort kommen später verschlüsselt in 'ne Datenbank, etc.):

  
$user = 'test';  
$pass = 'test';  
  
$hash   = 'md5';  
$iphash = hash ( $hash,  $_SERVER['REMOTE_ADDR'] );  
  
function confirm() {  
	global $iphash, $user, $pass;  
	if ( isset($_POST) && $_POST['user'] != '' && $_POST['pass'] != '' ) {  
		if ( $_POST['user'] != $user || $_POST['pass'] != $pass ) {  
			unset($_POST);  
			confirm();  
		} else {  
			session_name( $iphash );  
			session_start();  
			$_SESSION['login'] = true;  
			$html = <<< REDIRECT  
<html>  
		<head>  
			<meta http-equiv="refresh" content="0; URL=index.php">  
		</head>  
</html>  
  
REDIRECT;  
		}  
	} else {  
		$html = <<< HTML  
<form action="login.php" method="post">  
	<input name="user" type="text" />  
	<input name="pass" type="password" />  
	<input type="submit" value=" OK " />  
</form>  
  
HTML;  
	}  
echo $html;  
}  
  
confirm();  

Und die zugehörige index.php:

  
$hash   = 'md5';  
$iphash = hash ( $hash, $_SERVER['REMOTE_ADDR'] );  
  
if ( isset( $_COOKIE[$iphash] ) ) {  
	session_name( $iphash );  
	session_start();  
	if( $_SESSION['login'] ) {  
		$html = 'Angemeldet<br /><a href="logout.php">logout</a>'; // Text wenn eingeloggt  
	} else {  
		$html = 'Irgendwas ist schief gelaufen'; // Text wenn session "seltsam"  
	}  
} else {  
	$html = '<a href="login.php">login</a>'; // Text wenn nicht eingeloggt  
}  
  
echo $html;  

Wohlgemerkt alles quick and dirty (ja, DOCTYPE fehlt ...). Wollte nur Testen, ob das mit dynamischen Session-Namen funktioniert. Und zumindest bei mir tut es das, sogar wenn ich mit meinem Rechner und dem meiner Freundin über einen gemeinsamen router mit gemeinsamer IP gleichzeitig unterwegs bin - zwei völlig getrennte Sessions mit unterschiedlicher id.

Klar ist die Session weg, sobald sich meine IP ändert, aber zumindest bei mir tut sie das nur, wenn ich das will oder den browser schließe, und eine längere Sitzung ist ohnehin nicht erwünscht. Mit AOL habe ich keine Erfahrung.

Grüße und nochmals Danke,

WiMu

P.S.: hoffentlich mache ich mich gerade nicht total lächerlich ... PHP ist mir noch relativ neu