सत्र अपहरण को रोकने का कोई तरीका नहीं है 100%, लेकिन कुछ दृष्टिकोण के साथ हम एक हमलावर के सत्र को अपहरण करने के लिए समय कम कर सकते हैं।
सत्र अपहरण रोकने की विधि:
1 - हमेशा एसएसएल प्रमाणपत्र के साथ सत्र का उपयोग करें;
2 - सत्र कुकी को केवल httponly सेट के साथ सही पर भेजें (सेशन को एक्सेस करने के लिए जावास्क्रिप्ट को रोकें)
2 - लॉगिन और लॉगआउट पर सत्र पुनर्जनन आईडी का उपयोग करें (नोट: प्रत्येक अनुरोध पर सत्र पुनर्जनन का उपयोग न करें क्योंकि यदि आपके पास लगातार अजाक्स अनुरोध है तो आपके पास कई सत्र बनाने का मौका है।)
3 - एक सत्र का समय निर्धारित करें
4 - $ _SESSION चर में ब्राउज़र यूजर एजेंट की तुलना प्रत्येक अनुरोध पर $ _SERVER ['HTTP_USER_AGENT'] से की जाती है।
5 - एक टोकन कुकी सेट करें, और उस कुकी के समाप्ति समय को 0 पर सेट करें (जब तक कि ब्राउज़र बंद न हो जाए)। प्रत्येक अनुरोध के लिए कुकी मान को पुन: बनाएँ। (अजाक्स अनुरोध टोकन कुकी को पुन: उत्पन्न नहीं करने के लिए)। पूर्व:
//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');
}
नोट: अजाक्स अनुरोध नोट के साथ टोकन कुकी को पुन: उत्पन्न न करें: उपरोक्त कोड एक उदाहरण है। ध्यान दें: यदि उपयोगकर्ता लॉगआउट करते हैं तो कुकी टोकन को सत्र के साथ ही नष्ट कर दिया जाना चाहिए
6 - सत्र हाइजैकिंग को रोकने के लिए उपयोगकर्ता आईपी का उपयोग करना एक अच्छा तरीका नहीं है क्योंकि कुछ उपयोगकर्ता प्रत्येक अनुरोध के साथ आईपी बदलते हैं। उन मान्य उपयोगकर्ताओं का उपयोग करें
7 - व्यक्तिगत रूप से मैं डेटाबेस में सत्र डेटा संग्रहीत करता हूं, यह आपके ऊपर है कि आप किस विधि को अपनाते हैं
यदि आप मेरे दृष्टिकोण में गलती पाते हैं तो कृपया मुझे सुधारें। यदि आपके पास सत्र को रोकने के अधिक तरीके हैं तो कृपया मुझे बताएं।