2011-08-05 21 views
8

यहसत्र सुरक्षा?

If ($_SESSION['authenticated'] == true) { 
    /////Show secure page 
} 

किसी को सिर्फ जाओ और बदल सकते हैं जहां सत्र चर उनके $ _SESSION [ 'autheticated'] बनाने के लिए सही करने के लिए = संग्रहीत किया जाता है का उपयोग करने के सुरक्षित है?

उपयोगकर्ता के साथ $ _SESSION ['id'] = उनके इंडेक्स आईडी के साथ एक ही चीज़ है। मैं इस सुरक्षित को कैसे सक्षम कर पाऊंगा? क्या कोई बस आईडी मान को बदल सकता है और बदल सकता है और किसी अन्य उपयोगकर्ता का प्रतिरूपण कर सकता है?

क्या नीचे की विधि कुछ सुरक्षित बनाने का सही तरीका होगा?

$_SESSION['random_check'] = (random number) 

और यह भी मेरी डेटाबेस में एक कॉलम और हर बार में संग्रहीत कर रहा

If ($_SESSION['authenticated'] == true && $_SESSION['random_check'] == random_number) { 
/////Then show secure page 
} 

धन्यवाद,

+0

मैं अपने सभी परियोजनाओं 'उपयोगकर्ता नाम का एक हैश और तारीख में लॉग इन किया है (यह भी में अद्यतन के साथ संयुक्त booleans' के लिए इस विधि का उपयोग डीबी + सत्र में आयोजित), फिर जब चेक बनाया जाता है तो सभी की तुलना वैध और अद्यतन के रूप में की जाती है) यदि साझा होस्टिंग पर बीमार है तो सहेजें और फ़ोल्डर में सहेजने के लिए केवल पथ को बदलें। –

उत्तर

3

मैं सबसे होस्टिंग में यकीन है कि सत्र हूँ करने के लिए सिर्फ एक अंतरफलक है अपनी फाइल सिस्टम, यानी सभी सत्र डेटा सर्वर की हार्ड डिस्क में संग्रहीत है, यदि आप phpinfo() आउटपुट देखते हैं, तो आप देख सकते हैं कि सत्र डेटा का वास्तविक पथ कहां है।

इसके साथ, जब तक कि आप 777 तक अपना सत्र पथ नहीं डालते हैं और हमलावर यह जान लेता है कि आप कहां अपना ऐप होस्ट कर रहे हैं और लॉगिन है, तो मुझे नहीं लगता कि यह एक मुद्दा है।

यहां बड़ी समस्या आपकी कुकी को सुरक्षित कर रही है क्योंकि यह आपके सर्वर और क्लाइंट के माध्यम से आगे और आगे जा रही जानकारी का टुकड़ा है, जो हमलावर कानूनी उपयोगकर्ताओं का प्रतिरूपण करने के लिए उपयोग कर सकते हैं।

1

हाँ, क्या यह उपयोग करने के लिए सुरक्षित है। मैं इसका इस्तेमाल करता हूँ। मैं यह करता हूं: - चेक लॉगिन, यदि एक वैध लॉगिन है, तो $ _SESSION ['log'] = 'yes' सेट करें और um टोकन $ _SESSION ['टोकन'] = 'टोकन' इस टोकन को सहेजें, मैं सहेजता हूं एक इनपुट एचटीएमएल तत्व में और प्रत्येक कार्रवाई में जांचें। कुछ की तरह:

<?php 

    class token { 



     public function generateToken() { 

      return $_SESSION['token'] = md5(microtime()); 

     } 



     function generateField($name = "token"){ 

      return "<input type='hidden' value='{$_SESSION['token']}' name='{$name}'>"; 

     } 



     public function getToken() { 

      return $_SESSION['token']; 

     } 



     public function getTokenFromFields($method = "GET") { 

      return strtoupper($method) == "GET" ? $_GET['token'] : $_POST['token']; 

     } 



     public function checkToken() { 

      return $this -> getToken() == $this -> getTokenFromFields(); 

     } 

     public function updateToken() { 
      $_SESSION['token'] = md5(microtime()); 
     } 

    } 



?> 

<?php 
//orther file 
require 'class.token.php'; 
$token = new token(); 
$Atoken = $token -> generateToken(); 
echo "<script> 

     var data = {}; 

     data['token'] = '{$Atoken}'; 

     data['foo'] = 'baa'; 
    </script>"; 
$token -> generateField(); 
?> 

<script> 
$.ajax({type:"GET", url:"process.php", "data=foo=baa&token=" + data.token, success:function(response) { } }) 
</script> 

process.php में:

<?php 
if($_SESSION['token'] == $_GET['token']) { 
//do something 
} else die('bad token'); 
?> 
संबंधित मुद्दे