2010-05-27 11 views
5

मेरे PHP वेब-ऐप में मैं उपयोगकर्ता के डेटा को स्टोर करने के लिए सत्र का उपयोग करता हूं। Exmaple के लिए, यदि कोई उपयोगकर्ता लॉग इन करता है, तो उपयोगकर्ता वर्ग का एक उदाहरण उत्पन्न होता है और सत्र में संग्रहीत होता है।क्या ग्राहक क्लाइंट/उपयोगकर्ता द्वारा संशोधित सत्र हैं?

मेरे पास अपने विशेषाधिकार निर्धारित करने के लिए प्रत्येक उपयोगकर्ता से जुड़े पहुंच स्तर हैं।

स्टोर से एक सत्र में उपयोगकर्ता:

$_SESSION['currentUser'] = new User($_POST['username']); 

उदाहरण के लिए:

if($_SESSION['currentUser'] -> getAccessLevel() == 1) 
{ 
    //allow administration functions 
} 

जहां getAccessLevel() बस उपयोगकर्ता वर्ग कि _accesslevel सदस्य चर रिटर्न में एक प्राप्त विधि है।

क्या यह सुरक्षित है? या क्या क्लाइंट किसी भी प्रकार के सत्र मैनिपुलेशन के माध्यम से किसी भी तरह से अपने पहुंच स्तर को संशोधित कर सकता है?

उत्तर

2

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

एक लीक सत्र id सभी संसाधनों जो एक विशिष्ट आईडी के साथ जुड़े रहे पहुँचने के लिए तीसरे पार्टी सक्षम बनाता है: आप न करने पर क्या चाहते हैं, एक सत्र कुंजी के लिए किसी तीसरे पक्ष को लीक करने के लिए है।

इस पर एक नज़र डालें: http://www.php.net/manual/en/session.security.php

+0

यह कैसे लीक होगा, यह मानते हुए कि मैं क्वेरी स्ट्रिंग में सत्र_आईडी पास नहीं करता हूं और न ही पोस्ट के माध्यम से (जब तक यह स्वचालित रूप से ऐसा नहीं होता है, मुझे इस तरह की चीज़ से अवगत नहीं है), और मानते हैं कि उनके पास पहुंच नहीं है सर्वर? – Sev

+0

@ सेव - आपके नेटवर्क यातायात को स्नीफ किया जा सकता है। कुकीज/पैरामीटर्स प्राप्त करें/जो कुछ भी सादा-पाठ और आसानी से निकालने योग्य नहीं है जब तक आप SSL का उपयोग नहीं करते। – karim79

+0

आप सही हैं, धन्यवाद। – Sev

1

सत्र जानकारी सर्वर पर संग्रहीत किया जाता है और उपयोगकर्ता केवल एक कुंजी की पहुंच है। अभ्यास में मैंने अतिरिक्त कदमों के साथ इस तरह का कुछ उपयोग किया है। उपयोगकर्ता के विवरण को सत्यापित करने और उपयोगकर्ता ऑब्जेक्ट को संग्रहीत करने के बाद, मेरे पास एक क्वेरी होगी जो सत्र में जो भी है उसे सत्यापित करने के लिए आपके किसी भी सुरक्षित पृष्ठ को देखते समय चलाया जाता है, जो वे देखने की कोशिश कर रहे हैं उसके साथ ठीक है। जहां

validUser(User $user) 
{ 
    // Some query to verify the information in the session 
    // Return the results of verification 
} 
+0

अनिवार्य रूप से आप जो कह रहे हैं वह डेटाबेस से पूछताछ करता है और सुनिश्चित करता है कि डेटा सत्र डेटा के साथ मेल खाता है? अच्छा, ऐसा करने के लिए, मुझे $ _POST के माध्यम से सत्र में संग्रहीत उपयोगकर्ता नाम के साथ डीबी से पूछताछ करने की आवश्यकता होगी, और यदि वे पहले से ही अपने सत्र को संशोधित कर चुके हैं, तो संभवतः वे अपने उपयोगकर्ता नाम को भी संशोधित कर सकते हैं। – Sev

+0

जब आप लॉग इन करते हैं तो उपयोगकर्ता ऑब्जेक्ट में एक बार नमक या सत्र आईडी संग्रहीत करके आप इसके खिलाफ सुरक्षा कर सकते हैं। उपयोगकर्ता या log_in_user तालिका में एक कॉलम इसे संग्रहीत कर सकता है। इस तरह जब उपयोगकर्ता-> नाम और उपयोगकर्ता-> नमक डेटाबेस में क्या मेल नहीं खाता है, तो वे अमान्य हैं। – ashurexm

+0

उत्कृष्ट। धन्यवाद। – Sev

0

मैं उपयोगकर्ता कुछ हेरफेर करने के लिए ऐसी ही होती है, तो यह उन कंप्यूटर पर एक कुकी में संग्रहीत किया गया था के लिए एक ही रास्ता सोचा अपने page.php

if(!validUser($user)){ 
    // Relocate the user 
} 

के शीर्ष में।

क्या getaccesslevel कुकी में संग्रहीत है या इसे केवल लॉगिन कुकी की जांच करने के बाद सर्वर से कहा जाता है और उपयोगकर्ता कंप्यूटर पर संग्रहीत नहीं किया जाता है?

मुझे लगता है कि अगर उपयोगकर्ता को लॉग इन करने के बाद सर्वर पर इसे कॉल किया जाता है तो वे सुरक्षा छेद के अन्य माध्यमों के अलावा अन्य आसानी से हस्तक्षेप करने में सक्षम नहीं होंगे।

बस मेरा अनुमान है, मैं अभी तक सुरक्षा के साथ इतना अच्छा नहीं हूं। मैं इस पर नजर रखूंगा कि दूसरों को क्या कहना है और शायद मैं कुछ सीख सकता हूं।

संबंधित मुद्दे