Es gibt keine Möglichkeit, das Entführen von Sitzungen zu 100% zu verhindern, aber mit einem gewissen Ansatz können wir die Zeit reduzieren, die ein Angreifer benötigt, um die Sitzung zu entführen.
Methode zur Verhinderung von Sitzungsentführungen:
1 - Verwenden Sie immer eine Sitzung mit SSL-Zertifikat.
2 - Sitzungscookie nur senden, wenn httponly auf true gesetzt ist (verhindern Sie, dass Javascript auf das Sitzungscookie zugreift)
2 - Verwenden Sie die ID zur Sitzungsregenerierung beim An- und Abmelden (Hinweis: Verwenden Sie die Sitzungsregenerierung nicht bei jeder Anforderung, da Sie bei aufeinanderfolgenden Ajax-Anforderungen die Möglichkeit haben, mehrere Sitzungen zu erstellen.)
3 - Legen Sie ein Sitzungszeitlimit fest
4 - Speichern Sie den Browser-Benutzeragenten in einer $ _SESSION-Variablen und vergleichen Sie ihn bei jeder Anforderung mit $ _SERVER ['HTTP_USER_AGENT']
5 - Setzen Sie ein Token-Cookie und setzen Sie die Ablaufzeit dieses Cookies auf 0 (bis der Browser geschlossen wird). Generieren Sie den Cookie-Wert für jede Anforderung neu. (Bei Ajax-Anforderungen generieren Sie kein Token-Cookie.) EX:
//set a token cookie if one not exist
if(!isset($_COOKIE['user_token'])){
//generate a random string for cookie value
$cookie_token = bin2hex(mcrypt_create_iv('16' , MCRYPT_DEV_URANDOM));
//set a session variable with that random string
$_SESSION['user_token'] = $cookie_token;
//set cookie with rand value
setcookie('user_token', $cookie_token , 0 , '/' , 'donategame.com' , true , true);
}
//set a sesison variable with request of www.example.com
if(!isset($_SESSION['request'])){
$_SESSION['request'] = -1;
}
//increment $_SESSION['request'] with 1 for each request at www.example.com
$_SESSION['request']++;
//verify if $_SESSION['user_token'] it's equal with $_COOKIE['user_token'] only for $_SESSION['request'] > 0
if($_SESSION['request'] > 0){
// if it's equal then regenerete value of token cookie if not then destroy_session
if($_SESSION['user_token'] === $_COOKIE['user_token']){
$cookie_token = bin2hex(mcrypt_create_iv('16' , MCRYPT_DEV_URANDOM));
$_SESSION['user_token'] = $cookie_token;
setcookie('user_token', $cookie_token , 0 , '/' , 'donategame.com' , true , true);
}else{
//code for session_destroy
}
}
//prevent session hijaking with browser user agent
if(!isset($_SESSION['user_agent'])){
$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
}
if($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']){
die('session hijaking - user agent');
}
Hinweis: Token-Cookie nicht mit Ajax-Anforderung neu generieren Hinweis: Der obige Code ist ein Beispiel. Hinweis: Wenn sich Benutzer abmelden, muss das Cookie-Token sowie die Sitzung zerstört werden
6 - Es ist kein guter Ansatz, die Benutzer-IP zu verwenden, um das Entführen von Sitzungen zu verhindern, da sich die IP-Adresse einiger Benutzer bei jeder Anforderung ändert. DAS BEEINFLUSST GÜLTIGE BENUTZER
7 - Ich persönlich speichere Sitzungsdaten in einer Datenbank. Es liegt an Ihnen, welche Methode Sie anwenden
Wenn Sie Fehler in meinem Ansatz finden, korrigieren Sie mich bitte. Wenn Sie mehr Möglichkeiten haben, um Sitzungshyjaking zu verhindern, sagen Sie es mir bitte.