आज मैं कुछ परेशान देखा जबकि storage/framework/sessions
Laravel 5.Laravel - सत्र डेटा बचता लॉग-आउट/लॉग-इन, यहां तक कि विभिन्न उपयोगकर्ताओं के लिए
यहाँ द्वारा बनाई गई फ़ोल्डर में सत्र फ़ाइलों का निरीक्षण क्या हुआ है:
- मैं उपयोगकर्ता के रूप में लॉग इन एक
- मैं एक पृष्ठ सत्र
- मैं लॉग आउट में चर एक्स संग्रहीत करता है पर नेविगेट, लेकिन ब्राउज़र बंद नहीं किया।
storage/framework/sessions
में सत्र फ़ाइल अभी भी वहां थी, और ब्राउज़र कुकी जीवित थी।- मैं उपयोगकर्ता बी
- में पुरानी सत्र फ़ाइल हटा दी गई और एक नई सत्र फ़ाइल वहां थी।
- मैंने नई सत्र फ़ाइल में देखा - आश्चर्य! परिवर्तनीय एक्स लॉग-आउट से बच गया है और अभी भी वहां है, उपयोगकर्ता बी के लिए सुलभ है!
यह सुरक्षा चिंताओं की ओर जाता है, क्योंकि अब उपयोगकर्ता बी
Laravel स्रोत कोड के माध्यम से डिबगिंग जबकि, मुझे पता चला है कि सत्र स्टोर लॉगआउट/लॉगिन के दौरान साफ किया कभी नहीं किया गया है उपयोगकर्ता ए के डेटा तक पहुँच गया है प्रक्रिया। Illuminate\Auth\Guard::clearUserDataFromStorage()
विधि में केवल लॉगिन प्रमाण-पत्र हटा दिए जा रहे हैं, लेकिन सभी सत्र स्टोर विशेषताएँ अभी भी वहां हैं, और बाद में $kernel->terminate($request, $response);
को कॉल किया जाता है, जो बदले में Illuminate\Session\Middleware\StartSession::terminate()
Store::save()
पर कॉल करता है, जो इस तथ्य को अनदेखा करते हुए $this->attributes
को अंधेरे से बचाता है यह अब किसी अन्य उपयोगकर्ता से संबंधित है।
एक ओर से, यह तार्किक लगता है - लार्वावेल के पास मेरे डेटा के बारे में कोई धारणा नहीं है और क्या मैं इसे प्रमाणीकरण के साथ समाप्त करना चाहता हूं या नहीं। लेकिन यह बहुत अच्छा होगा कि इसे प्रमाणीकरण ऑब्जेक्ट में कुछ संवेदनशील डेटा संलग्न करने के समाधान के साथ कहीं और दस्तावेज किया जाए और इसके साथ समाप्त हो जाए।
इसका मतलब यह है कि मैं एक प्रोग्रामर के रूप में पूरी तरह से वर्तमान सत्र से सभी संवेदनशील डेटा दूर समाशोधन जब एक नया (या समान) उपयोगकर्ता में लॉग इन करने के लिए जिम्मेदार हूँ। लॉग आउट नहीं होगा पर
क्लियरिंग भरोसेमंद, क्योंकि उपयोगकर्ता कभी भी लॉगआउट लिंक पर क्लिक नहीं कर सकता है, लेकिन सत्र को "समाप्त" करने का इंतजार कर सकता है, जिसके लिए लैरावेल अभी भी सत्र को साफ़ नहीं करता है।
ध्यान में रखने के लिए एक और बात: मुझे सत्र को बहुत जल्दी नहीं साफ़ करना चाहिए - एंटीफॉर्गेरी टोकन मौजूद होना चाहिए, या फिर लॉगिन फॉर्म हमेशा विफल रहेगा।
http://laravel.io/forum/04-27-2014-how-to-expire-session-data
मैं इस से उलझन में मिल गया:
मैं एक मंच विषय है जो भी कुछ ऐसी ही समस्या का समाधान करने की कोशिश करता पाया है
मैं एक और उस पर जाना था आज और पता चला कि क्या समस्या यह थी: सत्र :: फ्लश() ऐप बनाता है जो सत्र डेटा को हटाता नहीं है, जैसे शॉपिंग कार्ट विवरण
यदि यह सत्य है, तो सत्र से पूरी तरह से छुटकारा पाने का एकमात्र तरीका PHP मूल session_unset()
और session_destroy()
का उपयोग करना होगा, लेकिन मैं इस तरह से नहीं जाना चाहूंगा - मैं क्लीनर, लैरवेल-आश समाधान ढूंढना पसंद करूंगा, अगर मुमकिन।
मैं लैरवेल को कैसे बता सकता हूं कि मैं प्रमाणीकरण समाप्त होने या उपयोगकर्ता लॉग आउट होने पर उपयोगकर्ता प्रमाणीकरण डेटा के साथ अपने पुराने सत्र डेटा को एक साथ हटा देना चाहता हूं?
हाँ, यह काम करेगा जब उपयोगकर्ता उद्देश्य पर बाहर लॉग करता है। लेकिन अगर वह सत्र समाप्त होने तक ब्राउज़र को खुले रखता है, तो मुझे उन भूलभुलैया कार्यों को मैन्युअल रूप से कॉल करना होगा। ऐसा लगता है, मैं अकेला नहीं हूं जिसने इस संभावित सुरक्षा समस्या की खोज की है: https://github.com/laravel/framework/issues/8661 – JustAMartin
उत्तर अपडेट किया गया। क्या यह आपके लिए इस मुद्दे को ठीक करता है? – MartinJH
हां, यदि उपयोगकर्ता ब्राउज़र बंद कर देता है, तो यह हमेशा ठीक काम करता है और इसमें कोई समस्या नहीं है। समस्या केवल तभी होती है जब उपयोगकर्ता बस छोड़ देता है और उसके बाद एक और उपयोगकर्ता आता है और लॉग इन करता है - तो पुराने सत्र चर मौजूद हैं। मुझे लगता है, मुझे लॉगआउट और लॉगिन दोनों के दौरान उन फ्लश() कॉलों के साथ रहना होगा, जबकि लैरवेल में कोई बेहतर अंतर्निहित समाधान नहीं है, यह निर्दिष्ट करने के लिए कि मैं कुछ सत्र चर बदलना चाहता हूं, सत्र बदलने के बाद । – JustAMartin