प्रश्न और परिदृश्य
विजेट support.example द्वारा सर्व किया जाता है और shop-a.example तथा shop-b.example जैसी टॉप-लेवल साइटों द्वारा एम्बेड किया जाता है। इसे shop-a.example के अंतर्गत प्रोडक्ट, चेकआउट और हेल्प पेजों पर एक सेशन को बनाए रखना चाहिए, जबकि shop-b.example को एक अलग (isolated) स्टेट प्राप्त होनी चाहिए। डिज़ाइन में प्रतिबंधित थर्ड-पार्टी कुकीज़, पुराने ब्राउज़र्स, लॉगआउट, एजेंट हैंडऑफ़ और मल्टीपल टैब्स को ध्यान में रखा जाना चाहिए।
इंटरव्यूअर क्या टेस्ट कर रहा है
- क्या उम्मीदवार यह समझता है कि CHIPS कुकी को टॉप-लेवल साइट और एम्बेडेड ओरिजिन दोनों द्वारा की (key) करता है?
- क्या वे प्रति-साइट पर्सिस्टेंट स्टेट और अनपार्टिशन्ड थर्ड-पार्टी स्टेट, जिसके लिए यूज़र की अनुमति की आवश्यकता होती है, के बीच अंतर कर सकते हैं?
- क्या वे कुकी डिज़ाइन, सर्वर सेशन्स, CSRF, रीप्ले प्रोटेक्शन और लॉगआउट को एक डेटा फ़्लो में जोड़ सकते हैं?
- क्या वे कैपेबिलिटी डिटेक्शन, लेगेसी फॉलबैक, कैश कीज़ और ऑब्ज़र्वेबिलिटी को कवर करते हैं?
पहले पूछे जाने वाले स्पष्टीकरण प्रश्न
HTTPS की पुष्टि करें, क्या विजेट को टॉप-लेवल साइटों पर एक व्यक्ति की पहचान करनी चाहिए, क्या सबडोमेन एक सेशन साझा करते हैं, और क्या एक टॉप-लेवल लॉगिन पेज स्वीकार्य है। डेटा संवेदनशीलता, सेशन लाइफ़टाइम, सर्वर पुश और टार्गेट ब्राउज़र्स को स्पष्ट करें। यदि बिज़नेस को वास्तव में क्रॉस-साइट पहचान की आवश्यकता है, तो केवल CHIPS ही इसका तंत्र नहीं है; स्पष्ट लॉगिन या ऑथराइज़ेशन का उपयोग करें।
30-सेकंड का उत्तर ढांचा
मैं सेशन को एक टॉप-लेवल साइट से संबंधित के रूप में परिभाषित करूँगा। विजेट Partitioned के साथ एक सुरक्षित कुकी सेट करता है, और सर्वर टॉप-लेवल साइट और विजेट सेशन का उपयोग करके स्टेट को रिज़ॉल्व करता है; एक साइट के सबडोमेन उस पार्टीशन को साझा करते हैं, जबकि दूसरी साइट को एक अलग पार्टीशन मिलता है। कुकी कोई क्रॉस-साइट आइडेंटिटी क्रेडेंशियल नहीं है। क्रॉस-साइट लॉगिन एक टॉप-लेवल ऑथराइज़ेशन फ़्लो का उपयोग करता है। जब CHIPS अनुपलब्ध हो, तो पर्सिस्टेंट स्टेट के बिना चलाएं या यूज़र से स्पष्ट रूप से ऑथराइज़ करने के लिए कहें। लॉगआउट, CSRF, कैश आइसोलेशन और मल्टी-टैब व्यवहार को शुरू से अंत तक सत्यापित करें।
चरण-दर-चरण गहन विश्लेषण
- ट्रस्ट बाउंड्री परिभाषित करें। एम्बेडिंग साइट को एक पार्टीशन संदर्भ के रूप में मानें, न कि
Originस्ट्रिंग से प्राप्त ऑथराइज़ेशन निर्णय के रूप में। एक अनुमति सूची (allowlist) बनाए रखें और मैसेज ओरिजिन, टेनेंट और सेशन स्टेट को मान्य करें। - पार्टिशन्ड कुकी सेट करें।
Secure, एक उपयुक्तSameSiteमान औरPartitionedका उपयोग करें; वर्तमान होस्ट से बाइंड करते समय__Hostप्रीफ़िक्स को प्राथमिकता दें। लॉजिकल कुकी की में एम्बेडेड ओरिजिन और टॉप-लेवल साइट शामिल होती है, इसलिए वही विजेट दो टॉप-लेवल साइटों पर एक ही कुकी को नहीं पढ़ सकता है। - सर्वर सेशन डिज़ाइन करें। कुकी में केवल एक रैंडम अपारदर्शी पहचानकर्ता (opaque identifier) स्टोर करें। सर्वर सेशन टेनेंट, टॉप-लेवल साइट, निर्माण समय, समाप्ति और निरसन (revocation) संस्करण रिकॉर्ड करता है। केवल ब्राउज़र पार्टिशनिंग पर भरोसा करने के बजाय प्रत्येक अनुरोध पर बाइंडिंग की पुनः जांच करें।
- सबडोमेन और कैश को संभालें। सबडोमेन एक टॉप-लेवल पार्टीशन का पुन: उपयोग कर सकते हैं, लेकिन HTML, स्क्रिप्ट और API कैश कीज़ में टेनेंट या सेशन वेरिएशन शामिल होना चाहिए। पर्सनलाइज़्ड प्रतिक्रियाओं के लिए प्राइवेट कैशिंग या स्पष्ट
Varyनीति का उपयोग करें; कभी भी CDN को एक साइट की स्टेट दूसरी साइट को सर्व न करने दें। - लॉगिन और ऑथराइज़ेशन डिज़ाइन करें। जब उसी व्यक्ति को पहचाना जाना आवश्यक हो, तो एक टॉप-लेवल लॉगिन पेज खोलें और एक अल्पकालिक, वन-टाइम ऑथराइज़ेशन कोड लौटाएं। कभी भी किसी URL,
postMessageया अनपार्टिशन्ड कुकी में लॉन्ग-लिव्ड टोकन न रखें। - फॉलबैक और ऑब्ज़र्वेबिलिटी प्रदान करें। सपोर्ट गायब होने पर नो-सेशन मोड में चलाएं या स्पष्ट ऑथराइज़ेशन का अनुरोध करें; कभी भी चुपचाप ग्लोबल थर्ड-पार्टी कुकी को रीस्टोर न करें। कुकी मानों या टोकन को लॉग किए बिना पार्टीशन-कुकी हिट दर, ऑथराइज़ेशन सफलता और सेशन निर्माण या निरसन कारणों को ट्रैक करें।
उच्च गुणवत्ता वाला नमूना उत्तर
मैं एक टॉप-लेवल साइट के भीतर विजेट स्टेट को संरक्षित करने की सीमा के लिए CHIPS का उपयोग करूँगा। support.example Secure, SameSite=None और Partitioned के साथ एक कुकी सेट करता है; यह केवल एक अपारदर्शी सेशन पहचानकर्ता स्टोर करता है। सर्वर सेशन टेनेंट, टॉप-लेवल साइट, समाप्ति और निरसन संस्करण को बाइंड करता है। shop-a.example के अंतर्गत सबडोमेन एक पार्टीशन का पुन: उपयोग करते हैं, जबकि shop-b.example स्वाभाविक रूप से एक अन्य स्टेट प्राप्त करता है।
क्रॉस-साइट पहचान उस कुकी पर निर्भर नहीं करती है। विजेट लॉगिन के लिए एक टॉप-लेवल पेज खोलता है, यूज़र एक्शन के बाद एक बार इस्तेमाल होने वाला ऑथराइज़ेशन कोड प्राप्त करता है, और एक मान्य मैसेज चैनल के माध्यम से वर्तमान पार्टीशन में इसे अल्पकालिक सेशन के लिए एक्सचेंज करता है। यदि कोई पुराना ब्राउज़र या नीति पार्टिशन्ड कुकीज़ को ब्लॉक करती है, तो विजेट ग्लोबल थर्ड-पार्टी कुकी पर वापस जाने के बजाय नो-सेशन अनुभव या स्पष्ट ऑथराइज़ेशन प्रदान करता है। दो टॉप-लेवल साइटों, सबडोमेन, लॉगआउट, समाप्ति, समवर्ती टैब्स, कैशिंग, CSRF, जाली संदेशों और प्राइवेसी सेटिंग्स का परीक्षण करें। प्राथमिक संदर्भ MDN के CHIPS और Storage Access API दस्तावेज़ तथा Privacy Sandbox का CHIPS विवरण हैं।
सामान्य गलतियां
Partitionedकुकी को क्रॉस-साइट सिंगल-साइन-ऑन क्रेडेंशियल के रूप में मानना, जिससे आइसोलेशन विफल हो जाता है।- टेनेंट बाइंडिंग, निरसन, CSRF और रीप्ले की अनदेखी करते हुए केवल
Originसे ऑथराइज़ करना। - CHIPS उपलब्ध न होने पर अनपार्टिशन्ड थर्ड-पार्टी कुकी का चुपचाप उपयोग करना, जिससे लीकेज या ब्लॉकिंग होती है।
- CDN, Service Worker या प्रॉक्सी कैश वेरिएशन को छोड़ देना और एक साइट की पर्सनलाइज़्ड प्रतिक्रिया दूसरी साइट को सर्व करना।
- URLs,
postMessageया फ़्रंटएंड-रीडेबल कुकीज़ में लॉन्ग-लिव्ड टोकन रखना।
फॉलो-अप प्रश्न और उत्तर
आप Storage Access API के मुकाबले CHIPS का उपयोग कब करेंगे?
प्रति टॉप-लेवल साइट स्वतंत्र एम्बेडेड स्टेट के लिए CHIPS का उपयोग करें। जब अनपार्टिशन्ड थर्ड-पार्टी स्टेट की उचित आवश्यकता हो और यूज़र अनुमति दे सके, जैसे कि स्पष्ट साइन-इन, तो Storage Access API का उपयोग करें। उनकी प्राइवेसी बाउंड्रीज़ अलग हैं, इसलिए एक दूसरे का मूक विकल्प नहीं है।
आप कैसे साबित करेंगे कि दो टॉप-लेवल साइटें एक सेशन साझा नहीं कर सकती हैं?
एक ही ब्राउज़र में दोनों साइटों में विजेट को एम्बेड करें और सेशन पहचानकर्ता, सर्वर टेनेंट बाइंडिंग और कैश हिट रिकॉर्ड करें। एक साइट की कुकी साफ़ करने, लॉगआउट करने, नया टैब खोलने और सबडोमेन बदलने से दूसरी साइट की स्टेट कभी नहीं बदलनी चाहिए।
क्या होगा यदि प्रोडक्ट सभी साइटों पर एक व्यक्ति को पहचानने पर जोर देता है?
आवश्यकता को स्पष्ट पहचान ऑथराइज़ेशन में अपग्रेड करें: टॉप-लेवल लॉगिन, अल्पकालिक वन-टाइम कोड, सर्वर एक्सचेंज और निरस्त करने योग्य सेशन्स। एक छिपा हुआ क्रॉस-साइट ट्रैकिंग चैनल बनाने के बजाय सहमति और विफलताओं को रिकॉर्ड करें।