कुकी बनाम सत्र बनाम jwt


12

मैं वेब अनुप्रयोगों में प्रमाणीकरण / प्राधिकरण पर पढ़ रहा हूं। क्या कोई मेरे वर्तमान ज्ञान की पुष्टि / सुधार कर सकता है?

  • कुकीज़: उनके शुरुआती संस्करण में, एक अद्वितीय ग्राहक के साथ एक टेक्स्ट फ़ाइल, ग्राहक के बारे में आवश्यक सभी अन्य जानकारी (जैसे भूमिकाएँ)

  • सत्र: केवल विशिष्ट क्लाइंट आईडी एक फ़ाइल (जिसे कुकी भी कहा जाता है) में भेजी जाती है, बाकी सब कुछ सर्वर पर संग्रहीत होता है

  • JWT: सब कुछ टोकन में संग्रहित किया जाता है (जिसे टेक्स्ट फ़ाइल में भी संग्रहीत किया जा सकता है, जिसे कुकी भी कहा जाता है)

किसी भी प्रतिक्रिया के लिए धन्यवाद!

जवाबों:


12

कुकीज़: उनके शुरुआती संस्करण में, एक अद्वितीय ग्राहक के साथ एक टेक्स्ट फ़ाइल, ग्राहक के बारे में आवश्यक अन्य सभी जानकारी (जैसे भूमिकाएँ)

कुकीज़ ग्राहक गतिविधि से संबंधित डेटा key-valueको बनाए रखने के लिए मूल रूप से संबोधित किए गए टुपल्स हैं । यह अवधारण जिसे हम सत्र या अनुप्रयोग स्थिति के रूप में जानते हैं । मूल रूप से, वे वेब अनुप्रयोगों की स्थिति के लिए बनाए गए थे; अधिक विशेष रूप से, क्लाइंट-साइड पर स्थिति। (1)

कुकीज़ आमतौर पर सर्वर द्वारा प्रतिक्रिया हेडर ( Set-Cookie key=value) के माध्यम से सेट की जाती हैं । हालाँकि, इन्हें क्लाइंट द्वारा भी सेट किया जा सकता है। उदाहरण के लिए, DOM ( document.cookie) द्वारा ।

कुकीज़ के बारे में जानने के लिए एक महत्वपूर्ण बात यह है कि वे उपयोगकर्ताओं की पहचान नहीं करते हैं। वे बल्कि terna डेटा - क्लाइंट - सर्वर / पथ को जोड़ते हैं । (3)

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

सत्र: केवल विशिष्ट क्लाइंट आईडी एक फ़ाइल (जिसे कुकी भी कहा जाता है) में भेजी जाती है, बाकी सब कुछ सर्वर पर संग्रहीत होता है।

सत्र से, मुझे लगता है कि आप सर्वर सत्र का मतलब है । जैसा कि मैंने टिप्पणी की, सत्रों को क्लाइंट-साइड में भी लागू किया जा सकता है। क्लाइंट-साइड सत्र के साथ अंतर यह है कि डेटा सर्वर-साइड पर कहीं संग्रहीत है। (२) ऐसे परिदृश्यों में, जो हमें मिलता है वह सत्र आईडी है; और हम इसे कुकी के रूप में प्राप्त करते हैं। सत्र आईडी के बिना, सर्वर ग्राहक की पिछली गतिविधि के साथ आने वाले अनुरोधों को सहसंबंधित नहीं कर पाएगा। (3) उदाहरण के लिए, प्रमाणित उपयोगकर्ता, खरीदारी की टोकरी, आदि।

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

वितरित प्राप्तियों में, सत्र स्पष्ट कारणों से क्रमबद्ध होना चाहिए। यदि वे मेमोरी में स्टोर किए जाते हैं, तो इन-मेमोरी स्टोरेज (घटक) क्रमिक होना चाहिए। एक आम समाधान सत्र को फाइलों में संग्रहीत करना है। या RedSQL की तरह NoSQL DB में।

सुरक्षा के संबंध में। सर्वर-साइड सत्र क्लाइंट-साइड से अधिक सुरक्षित होते हैं। ग्राहक खतरों के प्रति अधिक संवेदनशील होते हैं क्योंकि उपयोगकर्ता आमतौर पर उन बहुत से खतरों से अनजान होते हैं जिनसे वे अवगत होते हैं। कम से कम नियमित उपयोगकर्ता नहीं।

दूसरी ओर, सर्वर-साइड इंफ्रास्ट्रक्चर पर हमला करना उचित नहीं है।

JWT: सब कुछ टोकन में संग्रहित किया जाता है (जिसे टेक्स्ट फ़ाइल में भी संग्रहीत किया जा सकता है, जिसे कुकी भी कहा जाता है)

ज़रुरी नहीं। जेडब्ल्यूटी मुख्य रूप से प्राधिकरण और टोकन के जारीकर्ता से संबंधित डेटा संग्रहीत करता है।

यद्यपि वे उपयोगकर्ता आईडी (उप) को शामिल करने के लिए उपयोग करते हैं, हम JWTs पाते हैं जो प्रमाणित उपयोगकर्ताओं की पहचान नहीं करते हैं। उदाहरण के लिए, मेहमानों के सत्र के लिए टोकन। JWTs की मुख्य सामग्री दावे हैं ; प्राधिकरण प्रक्रिया द्वारा जाँच की जाने वाली वस्तुएँ।

यह ध्यान रखना महत्वपूर्ण है कि JWTs वैश्विक भंडार नहीं हैंसत्र या आवेदन राज्य अभी भी कहीं संग्रहीत और स्वतंत्र रूप से प्रबंधित किया जाना है।

JWTs के बारे में, इन्हें अक्सर कुकीज़ के रूप में संग्रहीत किया जाता है, हालाँकि इन्हें स्थानीय भंडारण में भी संग्रहीत किया जा सकता है। इसके अलावा, OWASP समुदाय सेशनस्टोर को वेब ब्राउज़र के लिए अधिक सुरक्षित मानता है। हालाँकि, यह ब्राउज़र के संस्करण पर निर्भर करता है


1: वर्ल्ड वाइड वेब का मतलब स्टेटलेस होना है। अगर हम स्टेटलेस सर्वर-साइड एप्लिकेशन बनाना चाहते हैं, तो सत्र को क्लाइंट-साइड में कहीं स्टोर किया जाना चाहिए।

2: सर्वर-साइड एप्लिकेशन को स्टेटफुल एप्लिकेशन में बदलना ।

3: क्लाइंट अनुप्रयोग के रूप में, उपयोगकर्ता के रूप में नहीं।


आईडी नोट करें कि कुछ, जैसे कि रूबी कॉन्फिग पर डिफ़ॉल्ट रूबी, एक कुकी (इन दिनों सामान्य रूप से एन्क्रिप्टेड) ​​में पूरे "सत्र" ऑब्जेक्ट को संग्रहीत करता है, जिसमें बस user_idलॉग इन उपयोगकर्ता के लिए कुछ ऐसा हो सकता है ।
फायर लांसर

7

कुकीज़: उनके शुरुआती संस्करण में, एक अद्वितीय ग्राहक के साथ एक टेक्स्ट फ़ाइल, ग्राहक के बारे में आवश्यक अन्य सभी जानकारी (जैसे भूमिकाएँ)

कुकी की आपकी परिभाषा वास्तव में यह नहीं बताती है कि वे क्या करते हैं। कुकी एक कुंजी-मूल्य जोड़ी है जो Set-Cookieसर्वर द्वारा HTTP प्रतिक्रिया हेडर ( ) के माध्यम से सेट की जाती है और ग्राहकों द्वारा संग्रहीत की जाती है जो उनका समर्थन करते हैं। Cookieकुकी के समाप्त नहीं होने पर, मिलान योजना, होस्ट, पथ, https के लिए प्रत्येक बाद के अनुरोध ( हेडर में) के साथ कुकीज़ वापस भेजे जाते हैं । आप कुकी में जो कुछ भी चाहते हैं, उसे स्टोर कर सकते हैं, और यह आपको HTTP के स्टेटलेस प्रोटोकॉल पर स्टेट का समर्थन करने की अनुमति देता है।

एक उदाहरण कुकी विनिमय इस तरह दिखता है:

यहां छवि विवरण दर्ज करें

सत्र: केवल विशिष्ट क्लाइंट आईडी एक फ़ाइल (जिसे कुकी भी कहा जाता है) में भेजी जाती है, बाकी सब कुछ सर्वर पर संग्रहीत होता है

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

JWT: सब कुछ टोकन में संग्रहित किया जाता है (जिसे टेक्स्ट फ़ाइल में भी संग्रहीत किया जा सकता है, जिसे कुकी भी कहा जाता है)

यह बहुत सच है। टोकन में सब कुछ संग्रहीत है। टोकन कुकी में संग्रहीत किया जा सकता है (ऊपर देखें)। यह सर्वर सत्र का एक विकल्प है, और यह काम करता है क्योंकि टोकन सर्वर द्वारा हस्ताक्षरित और सत्यापित किया जाता है, इसलिए इसे परिवर्तित या जाली नहीं किया जा सकता है, और यह क्लाइंट पक्ष पर संग्रहीत करने के लिए सुरक्षित है।


JWTs सामान्य रूप से मेरे अनुभव में कुकीज़ में संग्रहीत नहीं हैं। वे हो सकते हैं, लेकिन अधिक बार मैंने उन्हें अपने स्वयं के हेडर (या अक्सर प्राधिकरण हेडर) में सर्वर के रास्ते पर देखा है और क्लाइंट में मेमोरी या लोकल या सेशन स्टोरेज में संग्रहीत किया है।
पॉल

1
@ स्थानीय भंडारण से संबंधित यह क्लाइंट पर निर्भर करता है। सभी क्लाइंट नहीं और सबसे अधिक उपयोग किए जाने वाले क्लाइंट के सभी संस्करण वेब स्टोरेज का समर्थन नहीं करते हैं। यहाँ एक नज़र रखना । यदि वे हैं, तो टोकन मौसमी बनाने के लिए बेहतर है । लेकिन, अगर हमारे ग्राहक स्थानीय भंडारण का समर्थन नहीं करते हैं; Httponly कुकीज़ + एसएसएल + क्लाइंट फिंगरप्रिन्ट हमें काफी सुरक्षित कार्यान्वयन प्रदान करते हैं।
Laiv

@Laiv मैं आपसे असहमत नहीं हूँ; बस सैमुअल ने कहा कि "टोकन एक कुकी में संग्रहीत है", और मैं सिर्फ यह देखने की कोशिश कर रहा था कि यह हमेशा ऐसा नहीं होता है।
पॉल

@Paul मैं बदल गया "पढ़ने के लिए ... एक कुकी में संग्रहीत किया जा सकता है"
शमूएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.