कब और क्यों मुझे session_regenerate_id () का उपयोग करना चाहिए?


95

मुझे session_regenerate_id()php में फ़ंक्शन का उपयोग क्यों और कब करना चाहिए ? क्या मुझे इसका उपयोग करने के बाद हमेशा इसका उपयोग करना चाहिए session_start()? मैंने पढ़ा है कि मुझे सत्र निर्धारण को रोकने के लिए इसका उपयोग करना है, क्या यह एकमात्र कारण है?


क्योंकि सत्र शुरू होने के बाद इसे बनाया जाता है और दूसरे पृष्ठ पर जब आप सत्र शुरू करते हैं तो चर मौजूद होते हैं: -
HaRsH

@ हर्ष ओ? Session_regenerate_id पुराने सत्र ID को निकालता है, और उदाहरण के लिए XSS के साथ सत्र को अपहरण से बचने के लिए एक नया बनाता है। अन्य दस्तावेज़ों में सत्र चर की दृश्यता पर इसका कोई प्रभाव नहीं पड़ता है।
Xatenev

हाँ, मुझे पता है कि अन्य चर पर मेरा कोई प्रभाव नहीं है, लेकिन यदि आप सत्र को उस पृष्ठ पर शुरू नहीं करते हैं, तो चर उस पृष्ठ पर कोर php में मौजूद नहीं हैं
HaRsH

1
लेकिन यह session_regenerate_id के बारे में है, session_start के बारे में नहीं ...
Xatenev

1
मेरा सुझाव है कि RFC को पढ़ना चाहिए जहाँ यह प्रस्तावित किया गया था: wiki.php.net/rfc/precise_session_management
jankal

जवाबों:


96

क्या है session_regenerate_id()?

जैसा कि फ़ंक्शन नाम कहता है, यह एक फ़ंक्शन है जो वर्तमान सत्र आईडी को एक नए के साथ बदल देगा, और वर्तमान सत्र की जानकारी रखेगा।

यह क्या करता है?

यह मुख्य रूप से सत्र निर्धारण हमलों को रोकने में मदद करता है। सेशन फिक्सेशन अटैक वह जगह है जहां एक दुर्भावनापूर्ण उपयोगकर्ता किसी अन्य उपयोगकर्ता के सत्र आईडी (SID) को ठीक करने (सेट) करने के लिए सिस्टम में भेद्यता का फायदा उठाने की कोशिश करता है। ऐसा करने पर, उन्हें मूल उपयोगकर्ता के रूप में पूर्ण पहुंच प्राप्त होगी और वे कार्य करने में सक्षम होंगे जिन्हें अन्यथा प्रमाणीकरण की आवश्यकता होगी।

इस तरह के हमलों को रोकने के लिए, उपयोगकर्ता को एक नया सत्र आईडी असाइन करें session_regenerate_id()जब वह सफलतापूर्वक साइन इन (या हर एक्स अनुरोध के लिए) करता है। अब केवल उसके पास सत्र आईडी है, और आपकी पुरानी (निर्धारित) सत्र आईडी अब मान्य नहीं है।

मुझे कब उपयोग करना चाहिए session_regenerate_id()?

जैसा कि सिम्बियन नीचे दी गई टिप्पणियों में इंगित करता है, सत्र आईडी को प्रमाणीकरण राज्य में किसी भी संक्रमण पर और केवल प्रमाणीकरण संक्रमणों में परिवर्तित किया जाना चाहिए ।

आगे की पढाई:


2
और हैकर 20 वीं कॉल करता है तो क्या होगा? सत्र आईडी को बदल दिया गया है और वह सत्र के मालिक हैं;))
fred727

@ fred727 यदि हैकर 20 वीं कॉल को हिट करने के लिए पर्याप्त भाग्यशाली है, तो उपयोगकर्ता के पास एक अमान्य आईडी होगी और इसे अब प्रमाणित नहीं किया जाएगा। हैकर और उपयोगकर्ता दोनों के उत्थान के बिना प्रमाणित किया जाएगा।
ब्रैडमैज

सत्रों में संवेदनशील जानकारी संग्रहीत करते समय session_regenerate_id को कॉल करना भी उपयोगी हो सकता है (इसलिए न केवल प्रमाणीकरण tansitions पर)
एडम

यदि सत्र जानकारी कुकी में नहीं है, तो क्या सत्र को ठीक करना संभव है? मैं अपने सर्वर में फाइलों में सत्र जानकारी संग्रहीत कर रहा हूं, क्या आईडी पुनर्जीवित करने के लिए आवश्यक है?
गोंजालो

"किसी अन्य उपयोगकर्ता के सत्र आईडी (SID) को निर्धारित करने के लिए" .... इसे दूसरे उपयोगकर्ताओं के कंप्यूटर पर सत्र आईडी (SID) को ठीक करने (सेट करने) के साथ प्रतिस्थापित किया जाना चाहिए, फिर इसे प्रमाणित करने के बाद इसका उपयोग करें "
लेखाकार

25

सत्र अपहरण और सत्र निर्धारणsession_regenerate_id() को रोकने के लिए आपको इसका उपयोग करना चाहिए ।

से इस Security.SE जवाब :

सत्र अपहरण का अर्थ सत्र कुकी चोरी करना है। अन्य कंप्यूटरों के साथ स्थानीय नेटवर्क साझा करते समय यह सबसे आसानी से पूरा किया जा सकता है। जैसे स्टारबक्स। उदाहरण ... सत्र Y वाला एक उपयोगकर्ता Starbucks पर जेम्स की वेबसाइट ब्राउज़ कर रहा है। मैं उनके नेटवर्क ट्रैफ़िक पर सुन रहा हूँ, मेरे लट्टे को मार रहा हूँ। मैं जेम्स की वेबसाइट के लिए सत्र वाई की कुकीज़ के साथ उपयोगकर्ता लेता हूं और उनका उपयोग करने के लिए अपना ब्राउज़र सेट करता हूं। अब जब मैं जेम्स की साइट, जेम्स की साइट पर पहुँचता हूँ।

से इस वेबपेज :

सत्र निर्धारण एक हमले की तकनीक है जो उपयोगकर्ता के सत्र आईडी को एक स्पष्ट मूल्य के लिए मजबूर करती है। लक्ष्य वेब साइट की कार्यक्षमता के आधार पर, कई तकनीकों का उपयोग सत्र आईडी मान को "ठीक" करने के लिए किया जा सकता है। इन तकनीकों में क्रॉस-साइट स्क्रिप्टिंग से लेकर वेब साइट को पहले से बनाए गए HTTP अनुरोधों के साथ जोड़ने का फायदा होता है। किसी उपयोगकर्ता का सत्र आईडी तय हो जाने के बाद, हमलावर उस उपयोगकर्ता के लॉगिन करने की प्रतीक्षा करेगा। एक बार जब उपयोगकर्ता ऐसा करता है, तो हमलावर समान ऑनलाइन पहचान मानने के लिए पूर्वनिर्धारित सत्र आईडी मान का उपयोग करता है।

कब इस्तेमाल करें

जब उपयोगकर्ता कुछ महत्वपूर्ण इनपुट्स (अपडेट पासवर्ड, क्रेडेंशियल, पासवर्ड भूल गए आदि) को संपादित / अपडेट कर रहा है, जो साइट सुरक्षा या गोपनीयता नीति से समझौता कर सकता है।

यह सभी देखें:

PHP सुरक्षा गाइड: सत्र

सत्र निर्धारण (अच्छा पढ़ा)


22

मुझे लगता है कि सत्र विषाक्तता के मुद्दे को अच्छी तरह से कवर किया गया है।

"मुझे इसका उपयोग कब करना चाहिए?" भाग, यह महत्वपूर्ण है कि आप कदम बढ़ाएँ और विचार करें कि आपका आवेदन सत्र के साथ क्या कर रहा है। या, इसे दूसरे तरीके से रखने के लिए, यह महत्वपूर्ण सुरक्षा प्रश्न है जिसका आपको उत्तर देने की आवश्यकता है

अगर किसी को इस सत्र में पकड़ मिली तो उन्हें क्या हासिल होगा?

यदि आप सभी ट्रैक करते हैं तो बेनामी डेटा (उपयोगकर्ता साइट पर आता है और आप इसका उपयोग उनकी यात्राओं को ट्रैक करने के लिए करते हैं) तो एक सत्र को पुन: उत्पन्न करने का बहुत कम कारण है। एक अपहरणकर्ता उस सत्र को हथियाने से मूल्य का कुछ भी हासिल नहीं करेगा।

हालाँकि बहुत सी साइटें लॉगिन की पेशकश करती हैं। एक लॉगिन बहुत सारी चीजें बदलता है। मैं अपनी प्रोफाइल एक्सेस कर सकता हूं। मैं सेटिंग्स बदल सकते हैं। इसलिए एक अपहर्ता मेरे खाते तक पहुंच चाहता है, खासकर यदि सामान्य और व्यवस्थापक उपयोगकर्ता लॉगिन का प्रबंधन करने के लिए सभी सत्रों का उपयोग कर सकते हैं। इसलिए जब लोग मेरी साइट पर आते हैं और I में लॉग इन करते हैं तो सत्र को पुन: उत्पन्न करते हैं। यह सुरक्षा की एक अतिरिक्त परत जोड़ता है कि मेरे नए लॉग इन उपयोगकर्ता को अपहृत होने की संभावना कम है।

किसी भी समय हम एक सत्र में महत्वपूर्ण डेटा जोड़ते हैं, आपको सत्र आईडी को पुनर्जीवित करने पर विचार करना चाहिए। यदि आपको निर्धारण के खिलाफ अपने आवेदन को सख्त करने की आवश्यकता है तो एक यादृच्छिक पुनर्जनन उपयोगी हो सकता है लेकिन मैं हर अनुरोध पर पुन: उत्पन्न करूंगा। डिफ़ॉल्ट रूप से PHP स्थानीय डिस्क पर फ़ाइलों में सत्रों को संग्रहीत करता है। आप एक बहुत छोटी डिस्क I / O जोड़ रहे हैं ताकि अपेक्षाकृत छोटा हमला वेक्टर हो। यदि आपको वास्तव में अधिक सुरक्षा की आवश्यकता है, तो मैं नियमित आधार पर पुन: प्राप्ति पर पूर्ण HTTPS पर जाने की वकालत करूँगा (HTTPS निर्धारण को खींचने के लिए बहुत कठिन बनाता है)।


2
HTTPS निर्धारण पर कुछ भी नहीं बदलता है।
केलुनिक

4
लेकिन यह सूंघने के हमलों को कठिन बना देता है जिसका उपयोग सत्र आईडी को पहले स्थान पर लाने के लिए किया जा सकता है।
डेन्कोरियू

मेरा php ऐप सेकंड के भीतर लॉग आउट हो जाता है, पुनर्जनन का उपयोग कर रहा है, क्या सत्र फ़ाइलों की एक सीमा है जिसे बनाया जा सकता है या पुनर्निर्मित आईडी पर एक सीमा है जो लॉगआउट हो सकता है?
sqlchild

आम तौर पर नहीं, नहीं। आप इसके बारे में एक अलग प्रश्न पोस्ट करना चाह सकते हैं
Machavity

16

मुझे क्यों उपयोग करना चाहिए session_regenerate_id?

सत्र निर्धारण को रोकने के लिए आपको इसका उपयोग करना चाहिए ।

मुझे कब उपयोग करना चाहिए session_regenerate_id?

जब भी प्रमाणीकरण स्थिति बदलती है, तो यह मुख्य रूप से लॉगिन और लॉगआउट पर होती है।

उदाहरण

बॉब एक ​​सार्वजनिक कंप्यूटर पर बैठता है और stackoverflow.com पर ब्राउज़ करके वह वहाँ एक नया सत्र खोलता है। सत्र आईडी एक कुकी में सहेजी जाती है ( httpOnlyजावास्क्रिप्ट के माध्यम से पहुंच को रोकने के लिए ध्वज के साथ )। मान लीजिए कि स्टैक ओवरफ्लो में HTTPS हमेशा सक्षम था और secureकुकी के लिए ध्वज सेट भी था ।

अब हम सत्र कैसे चुरा सकते हैं?

बॉब सत्र आईडी लिखता है। वह ब्राउज़र को बंद किए बिना कंप्यूटर छोड़ देता है। अब ऐलिस इस कंप्यूटर पर आता है और देखता है कि स्टैक ओवरफ्लो पहले से ही लोड है। वह अब लॉग इन करती है।

अब हम उस अवस्था में हैं जहाँ आपको उपयोग करना चाहिए session_regenerate_id। यदि आप लॉगिन के दौरान यहां एक नया सत्र आईडी नहीं बनाते हैं, तो बॉब पिछले सत्र का उपयोग कर सकता है जो उसने ऐलिस के सत्र तक पहुंचने के लिए लिखा था और अब एलिस के रूप में लॉग इन किया जाएगा।


लेकिन उस समय तक जब session_regenerate_id()जारी किया गया, ऐलिस बोब्स खाते तक पहुंच सकता है? क्या वह सही है?
अकाम

2
@ लकम - यह देर हो चुकी है, लेकिन इसका जवाब देने के लायक है ... 1. बॉब लॉग आउट नहीं करता है, ऐलिस अपने लॉगिन का उपयोग कर सकता है - 2. बॉब लॉग आउट करता है, ऐलिस लॉग इन नहीं करता है, ऐलिस अपने सत्र आईडी का उपयोग कर सकता है, लेकिन अपने डेटा को एक्सेस करने के लिए कोई सक्रिय लॉगिन नहीं है - 3. बॉब लॉग आउट करता है, एलिस लॉग इन करता है, बॉब सत्र आईडी का उपयोग करता है, एक सक्रिय लॉगिन होता है, बॉब एलिस के डेटा तक पहुंचता है। लेकिन विशिष्ट होने के लिए: स्क्रिप्ट सुरक्षा पर निर्भर एक सत्र आईडी जरूरी नहीं कि आप लॉग आउट उपयोगकर्ता के डेटा का उपयोग कर सकते हैं, लेकिन आमतौर पर यह संभव है और एक उच्च जोखिम बोली जाती है।
कोडकंडिस

15

इसका इस्तेमाल आप बेहतर सुरक्षा के लिए कर सकते हैं।

इस तरह से आप एक समय के उपयोग के लिए सत्र आईडी बना रहे हैं।

कहते हैं कि आपका उपयोगकर्ता सत्र आईडी = 3 है

कुछ हैकर ने आपको क्लाइंट को हैक किया और उनका सेशन_डाय। तो हैकर उस कुकी का उपयोग अपने सत्र का उपयोग करने के लिए कर सकते हैं।

अगर आपको कोड पसंद है

session_start();
session_regenerate_id();

जब भी आप अपनी वेबसाइट का उपयोग कर रहे हैं, तो आप हर बार उनका सत्र बदल सकते हैं।

अब हैकर को सत्रांक 3 मिलता है

लेकिन आपने सत्र का उपयोग करने के बाद उसे बदल दिया है

उपयोगकर्ता के पास सेशन = 4 // है

हैकर का सत्र = 3 // शून्य है

लेकिन एक छोटी सी बात है कि आप पुन: बनाने की विधि का उपयोग कर रहे हैं और आपका ग्राहक बस वेबसाइट पर लॉगिन करें और ब्राउज़र या निष्क्रिय करें। आपके क्लाइंट के पास सेशनिड = 4 है और यदि हैकर को उस हिस्से में कुकीज़ मिलती हैं तो उनके पास समान सेशन होगा।

जैसा कि ऊपर बताया गया है कि आप अपने ग्राहक को एक तरह से डेटा सूँघने से बचा सकते हैं, लेकिन फिर भी यह इस मुद्दे को अच्छे के लिए ठीक नहीं करेगा।

लेकिन इसका तरीका बहुत सुरक्षित होगा यदि आप SSL एनसी का उपयोग करते हैं।

त्रुटिपूर्ण अंग्रेजी के लिए माफ करें।


12

एक साधारण उपयोग मामला:

// User visits a webshop
$shopcart = new Cart();

एक सत्र शुरू किया जाता है और डेटाबेस में एक प्रविष्टि बनाई जाती है। उपयोगकर्ता के शॉपकार्ट की पहचान उसके सत्र आईडी द्वारा की जाती है।

// User orders items
$shopcart->add('123', 20);
$shopcart->add('124', 18);
$shopcart->add('127', 5);

जोड़े गए प्रत्येक उत्पाद के लिए, मेरी शॉपकार्ट तालिका में एक रिकॉर्ड बनाया गया है। सत्र आईडी द्वारा भी पहचाना जाता है।

// User saves cart in order to use it later
$shopcart->save();

उपयोगकर्ता ने अपनी गाड़ी को बचाने का फैसला किया। इसे अब उनकी यूजर आईडी से जोड़ा जा रहा है।

// Regenerate session id for user to be able to make a new cart
session_regenerate_id();

Sesssion id को फिर से बनाया गया है और उपयोगकर्ता अब एक और शॉपकार्ट बनाना शुरू कर सकता है।


4

session_regenerate_id (): सत्र आईडी को पुन: उत्पन्न नहीं कर सकता - सत्र सक्रिय नहीं है

if(session_status() == PHP_SESSION_ACTIVE)
{
    session_regenerate_id();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.