Oturum kaçırmayı% 100 engellemenin bir yolu yoktur, ancak bazı yaklaşımlarla bir saldırganın oturumu ele geçirme süresini azaltabiliriz.
Oturum kaçırmayı önleme yöntemi:
1 - her zaman ssl sertifikasıyla oturum kullanın;
2 - oturum tanımlama bilgisini yalnızca HTponly true olarak ayarlanmış şekilde gönderin (javascript'in oturum tanımlama bilgisine erişmesini önleyin)
2 - oturum açma ve oturumu kapatma sırasında oturum yenileme kimliğini kullanın (not: her istekte oturum yenilemeyi kullanmayın çünkü ardışık ajax isteğiniz varsa, birden çok oturum oluşturma şansınız olur.)
3 - bir oturum zaman aşımı ayarlayın
4 - tarayıcı kullanıcı aracısını bir $ _SESSION değişkeninde saklayın ve her istekte $ _SERVER ['HTTP_USER_AGENT'] ile karşılaştırın
5 - bir belirteç çerezi ayarlayın ve bu çerezin sona erme süresini 0 olarak ayarlayın (tarayıcı kapanana kadar). Her istek için tanımlama bilgisi değerini yeniden oluşturun (ajax isteği için token tanımlama bilgisini yeniden oluşturmayın). 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');
}
not: belirteç tanımlama bilgisini ajax isteği ile yeniden oluşturmayın not: yukarıdaki kod bir örnektir. not: kullanıcılar oturumu kapatırsa, oturumun yanı sıra çerez simgesi de yok edilmelidir
6 - Oturum kaçırmayı önlemek için kullanıcı ipini kullanmak iyi bir yaklaşım değildir çünkü bazı kullanıcılar her istekte ip değişmektedir. GEÇERLİ KULLANICILARI ETKİLENEN
7 - Kişisel olarak oturum verilerini veritabanında saklıyorum, hangi yöntemi benimseyeceğiniz size kalmış
Yaklaşımımda bir hata bulursanız lütfen beni düzeltin. Eğer seansta huysuzluğu önlemek için başka yollarınız varsa lütfen bana söyleyin.