पहले-पक्ष की कुकी बनाने की रेसिपी

तीसरे पक्ष की कुकी का इस्तेमाल बंद होने के बाद, पहले-पक्ष की कुकी सेट करने का तरीका जानें. इनसे सुरक्षा, क्रॉस-ब्राउज़र के साथ काम करने, और काम न करने की संभावना को कम किया जा सकता है.

उपयोगकर्ता के संदर्भ के हिसाब से, कुकी पहले या तीसरे पक्ष की हो सकती हैं; उस समय उपयोगकर्ता किस साइट पर है. अगर कुकी का रजिस्टर किया जा सकने वाला डोमेन और स्कीम, मौजूदा टॉप लेवल पेज यानी ब्राउज़र के पता बार में दिखाए गए पेज से मेल खाती है, तो कुकी को उसी साइट से लिया गया पेज माना जाता है जिससे कुकी का इस्तेमाल किया गया है. आम तौर पर, इसे पहले-पक्ष की कुकी कहा जाता है.

मौजूदा साइट के अलावा, अन्य डोमेन की कुकी को आम तौर पर तीसरे पक्ष की कुकी कहा जाता है.

उदाहरण के लिए, अगर सेट की जाने वाली कुकी आपकी साइट पर इस्तेमाल नहीं की जाती है, तो इसका इस्तेमाल आपकी साइट के सेशन को मैनेज करने के लिए किया जाता है. हालांकि, क्रॉस-साइट iframe में भी इसका इस्तेमाल नहीं किया जाता. ऐसे में, उस कुकी का इस्तेमाल हमेशा पहले पक्ष के कॉन्टेक्स्ट में किया जाता है.

डिफ़ॉल्ट रूप से, कुकी को सभी साइटों के साथ शेयर किया जा सकता है और JavaScript से ऐक्सेस किया जा सकता है. साथ ही, इन्हें एचटीटीपी कनेक्शन पर भेजा जा सकता है. इन कनेक्शन की वजह से, निजता और सुरक्षा से जुड़े कुछ खतरे हो सकते हैं. डिफ़ॉल्ट तरीके को बेहतर बनाने के लिए काम चल रहा है. हालांकि, प्राइवसी सैंडबॉक्स और ऑरिजिन के लिए तय की गई कुकी जैसे अन्य प्रपोज़ल की मदद से, कुकी पर अन्य एट्रिब्यूट सेट करके काफ़ी काम किए जा सकते हैं.

यहां दिया गया कॉन्फ़िगरेशन सबसे सही तरीका है. इससे यह पक्का किया जा सकता है कि पहले पक्ष की कुकी, सुरक्षा और क्रॉस-ब्राउज़र के साथ काम कर सकती हैं या नहीं. इससे आपको एक सुरक्षित प्लैटफ़ॉर्म मिलता है. इसमें बदलाव किया जा सकता है, ताकि ज़रूरत पड़ने पर ही ऐप्लिकेशन खोलने की अनुमतियां चालू की जा सकें. इस लेख में, इस्तेमाल के कुछ खास उदाहरणों के लिए, रेसिपी के वैरिएशन के बारे में भी बताया गया है.

रेसिपी

Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
जानकारी

Host एक वैकल्पिक प्रीफ़िक्स है, जो कुछ एट्रिब्यूट को ज़रूरी बनाता है और कुछ को अनुमति नहीं देता है:

  • Secure मौजूद होना चाहिए
  • Domain हटाया जाना चाहिए
  • Path की वैल्यू / होनी चाहिए

Host को जोड़ने के बाद, ब्राउज़र पर भरोसा करके यह देखा जा सकता है कि ये एट्रिब्यूट, __Host नियमों के मुताबिक हैं या नहीं. साथ ही, अगर कुकी को अस्वीकार कर दिया गया है, तो ऐसा किया जा सकता है.

Secure असुरक्षित नेटवर्क पर कुकी को चोरी होने से बचाता है क्योंकि यह केवल एचटीटीपीएस कनेक्शन पर कुकी भेजने की अनुमति देता है. अगर आपने पूरी तरह से अपनी साइट को एचटीटीपीएस पर माइग्रेट नहीं किया है, तो इसे प्राथमिकता दें.

Domain एट्रिब्यूट से यह तय होता है कि किन होस्ट को कुकी मिल सकती है. इसे हटाने पर, सबडोमेन को छोड़कर, मौजूदा दस्तावेज़ होस्ट तक कुकी सीमित हो जाती है: example.com के लिए कुकी, example.com को किए जाने वाले हर अनुरोध पर भेजी जाएगी, लेकिन images.example.com के अनुरोध पर नहीं. अगर अलग-अलग सबडोमेन पर अलग-अलग ऐप्लिकेशन चल रहे हैं, तो इससे हैक या चोरी हुए एक डोमेन के अन्य डोमेन में जाने का जोखिम कम हो जाता है.

Path ब्राउज़र के लिए अनुरोध किए गए यूआरएल में मौजूद पाथ के बारे में बताता है, ताकि Cookie हेडर भेजा जा सके. Path=/ को सेट करने का मतलब है कि कुकी को उस डोमेन के सभी यूआरएल पाथ पर भेजा जाता है. Domain और Path=/ का कॉम्बिनेशन, कुकी को ऑरिजिन से सबसे करीब बनाता है. इसलिए, यह क्लाइंट-साइड स्टोरेज की तरह काम करता है, जैसे कि LocalStorage—इसमें कोई भ्रम नहीं है कि example.com/a को example.com/b के लिए अलग-अलग वैल्यू मिल सकती हैं.

HttpOnly एट्रिब्यूट, JavaScript के ऐक्सेस पर पाबंदी लगाकर आपकी साइट पर नुकसान पहुंचाने वाले तीसरे पक्ष की स्क्रिप्ट से सुरक्षा देता है. इससे कुकी को सिर्फ़ अनुरोध के हेडर में भेजा जा सकता है और document.cookie का इस्तेमाल करके, उसे JavaScript के लिए उपलब्ध नहीं कराया जा सकता.

Max-Age कुकी की लाइफ़ सीमित कर देता है, क्योंकि ब्राउज़र सेशन लंबे समय तक चल सकते हैं. साथ ही, यह भी ज़रूरी है कि पुरानी कुकी हमेशा के लिए मौजूद न रहें. यह कम समय वाली कुकी, जैसे कि उपयोगकर्ता सेशन या फ़ॉर्म सबमिशन के टोकन जैसी छोटी कुकी के लिए सही है. Max-Age को सेकंड में बताया गया है और पिछले उदाहरण में इसे 7776000 सेकंड पर सेट किया गया है, जो कि 90 दिन है. यह एक वाजिब डिफ़ॉल्ट तरीका है, जिसे अपने इस्तेमाल के उदाहरण के हिसाब से बदला जा सकता है.

SameSite=Lax कुकी को सिर्फ़ उसी साइट के अनुरोधों पर भेजने पर पाबंदी लगाता है. उदाहरण के लिए, जहां अनुरोध मौजूदा ब्राउज़िंग संदर्भ से मेल खाता है. इसका मतलब है कि उपयोगकर्ता फ़िलहाल जिस टॉप लेवल की साइट पर जा रहा है वह उनके जगह की जानकारी वाले बार में दिखती है. मॉडर्न ब्राउज़र में SameSite=Lax डिफ़ॉल्ट होता है. हालांकि, अलग-अलग डिफ़ॉल्ट ब्राउज़र वाले सभी ब्राउज़र के साथ इसे इस्तेमाल करने के लिए यह एक अच्छा तरीका है. कुकी को साफ़ तौर पर 'सिर्फ़ एक ही साइट' के तौर पर मार्क करके, उसे सिर्फ़ पहले-पक्ष के कॉन्टेक्स्ट के लिए सीमित किया जा रहा है. साथ ही, तीसरे पक्ष की कुकी बंद हो जाने पर, आपको उस कुकी में बदलाव करने की ज़रूरत नहीं है.

कुकी के अलग-अलग एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, एमडीएन पर Set-Cookie दस्तावेज़ देखें.

अगर आपकी साइट के पास सबडोमेन हैं और आपको उन सभी में एक ही सेशन रखना है, तो Host प्रीफ़िक्स बहुत सीमित हो सकता है. उदाहरण के लिए, news.site में finance.news.site और sport.news.site जैसे विषयों के लिए सबडोमेन हो सकते हैं और आपको उन सभी पर एक उपयोगकर्ता सेशन चाहिए. ऐसे मामले में, __Host के बजाय __Secure प्रीफ़िक्स का इस्तेमाल करें और Domain डालें.

रेसिपी

Set-Cookie:
__Secure-cookie-name=cookie-value;
Secure;
Domain=news.site;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
जानकारी

Secure एक वैकल्पिक प्रीफ़िक्स है, जो की तुलना में कम ज़रूरी शर्तें बताता हैHost: इसके लिए सिर्फ़ Secure एट्रिब्यूट के साथ कुकी सेट करना ज़रूरी है.

क्रॉस-साइट सब-अनुरोधों पर SameSite=Lax कुकी नहीं भेजी जाती हैं. उदाहरण के लिए, एम्बेड की गई इमेज या किसी तीसरे पक्ष की साइट पर iframe लोड होने पर, उन्हें तब भेजा जाता है, जब कोई उपयोगकर्ता ऑरिजिन साइट पर जाता है. उदाहरण के लिए, किसी दूसरी साइट से लिंक फ़ॉलो करते समय.

SameSite=Strict की मदद से, तीसरे पक्ष की वेबसाइटों से किए गए अनुरोधों के साथ-साथ कुकी के ऐक्सेस पर पाबंदी लगाई जा सकती है और उन्हें भेजने की अनुमति नहीं दी जा सकती. यह तब फ़ायदेमंद होता है, जब आपके पास उस सुविधा से जुड़ी कुकी हों जो हमेशा शुरुआती नेविगेशन के पीछे रहेंगी. जैसे, पासवर्ड बदलना या खरीदारी करना.

रेसिपी

Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Strict;