SameSite कुकी के बारे में बताया गया

Browser Support

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

हर कुकी में एक की-वैल्यू पेयर के साथ-साथ कई एट्रिब्यूट होते हैं. इनसे यह कंट्रोल किया जाता है कि उस कुकी का इस्तेमाल कब और कहां किया जाए.

SameSite एट्रिब्यूट (RFC6265bis में बताया गया है) की मदद से, यह तय किया जा सकता है कि आपकी कुकी, पहले पक्ष या सेम-साइट कॉन्टेक्स्ट तक सीमित है या नहीं. यहां 'साइट' का मतलब समझना ज़रूरी है. साइट, डोमेन सफ़िक्स और डोमेन के उस हिस्से का कॉम्बिनेशन होती है जो सफ़िक्स से ठीक पहले आता है. उदाहरण के लिए, www.web.dev डोमेन, web.dev साइट का हिस्सा है.

मुख्य शब्द: अगर उपयोगकर्ता www.web.dev पर है और static.web.dev से किसी इमेज का अनुरोध करता है, तो यह same-site अनुरोध है.

सार्वजनिक सफ़िक्स सूची से यह तय होता है कि किन पेजों को एक ही साइट पर मौजूद माना जाए. यह सिर्फ़ .com जैसे टॉप-लेवल डोमेन पर निर्भर नहीं करता, बल्कि इसमें github.io जैसी सेवाएं भी शामिल हो सकती हैं. इससे your-project.github.io और my-project.github.io को अलग-अलग साइटों के तौर पर गिना जाता है.

मुख्य शब्द: अगर उपयोगकर्ता your-project.github.io पर है और my-project.github.io से किसी इमेज का अनुरोध करता है, तो यह किसी दूसरी साइट से किया गया अनुरोध है.

कुकी के इस्तेमाल के बारे में बताने के लिए, SameSite एट्रिब्यूट का इस्तेमाल करना

कुकी पर मौजूद SameSite एट्रिब्यूट, इस व्यवहार को कंट्रोल करने के तीन अलग-अलग तरीके उपलब्ध कराता है. आपके पास एट्रिब्यूट की वैल्यू न देने का विकल्प होता है. इसके अलावा, कुकी को SameSite अनुरोधों तक सीमित करने के लिए, Strict या Lax का इस्तेमाल किया जा सकता है.

अगर आपने SameSite को Strict पर सेट किया है, तो आपकी कुकी सिर्फ़ पहले पक्ष के कॉन्टेक्स्ट में भेजी जा सकती है. इसका मतलब है कि कुकी के लिए साइट, ब्राउज़र के पता बार में दिखाई गई साइट से मैच करती हो. इसलिए, अगर promo_shown कुकी को इस तरह सेट किया जाता है:

Set-Cookie: promo_shown=1; SameSite=Strict

जब उपयोगकर्ता आपकी साइट पर होता है, तब कुकी को अनुरोध के साथ भेजा जाता है. हालांकि, अगर उपयोगकर्ता किसी दूसरी साइट से आपकी साइट पर मौजूद लिंक पर जाता है, तो शुरुआती अनुरोध पर कुकी नहीं भेजी जाती. यह उन कुकी के लिए अच्छा है जो हमेशा शुरुआती नेविगेशन के बाद मिलने वाली सुविधाओं से जुड़ी होती हैं. जैसे, पासवर्ड बदलना या खरीदारी करना. हालांकि, promo_shown जैसी कुकी के लिए यह काफ़ी पाबंदी वाला है. अगर आपका पाठक साइट के लिंक पर जाता है, तो वह चाहता है कि कुकी भेजी जाए, ताकि उसकी प्राथमिकता लागू की जा सके.

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

<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>

कुकी को Lax पर सेट किया गया हो, जैसा कि यहां बताया गया है:

Set-Cookie: promo_shown=1; SameSite=Lax

जब ब्राउज़र किसी दूसरे व्यक्ति के ब्लॉग के लिए amazing-cat.png से अनुरोध करता है, तो आपकी साइट कुकी नहीं भेजती. हालांकि, जब पाठक आपकी साइट पर cat.html के लिंक पर जाता है, तो उस अनुरोध में कुकी शामिल होती है.

हमारा सुझाव है कि आप SameSite का इस्तेमाल इस तरह करें: वेबसाइट के डिसप्ले पर असर डालने वाली कुकी को Lax पर सेट करें और उपयोगकर्ता की कार्रवाइयों से जुड़ी कुकी को Strict पर सेट करें.

SameSite को None पर भी सेट किया जा सकता है. इससे यह पता चलता है कि आपको कुकी को सभी कॉन्टेक्स्ट में भेजना है. अगर आपका संगठन ऐसी सेवा उपलब्ध कराता है जिसका इस्तेमाल अन्य साइटें करती हैं, तो None का इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि आपका मकसद साफ़ तौर पर ज़ाहिर हो. ऐसी सेवाओं में विजेट, एम्बेड किया गया कॉन्टेंट, अफ़िलिएट प्रोग्राम, विज्ञापन या कई साइटों पर साइन-इन करने की सुविधा शामिल है.

तीन कुकी, जिन्हें उनके संदर्भ के आधार पर None, Lax या Strict के तौर पर लेबल किया गया है
कुकी के कॉन्टेक्स्ट को साफ़ तौर पर None, Lax या Strict के तौर पर मार्क करें.

SameSite के बिना, डिफ़ॉल्ट ऐक्शन और सेटिंग में बदलाव

Browser Support

  • Chrome: 80.
  • Edge: 86.
  • Firefox: behind a flag.
  • Safari: not supported.

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

  • SameSite एट्रिब्यूट के बिना कुकी को SameSite=Lax के तौर पर माना जाता है.
  • SameSite=None वाली कुकी के लिए, Secure की जानकारी देना भी ज़रूरी है. इसका मतलब है कि उन्हें सुरक्षित कॉन्टेक्स्ट की ज़रूरत होती है.

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

डिफ़ॉल्ट रूप से SameSite=Lax

अगर आपने SameSite एट्रिब्यूट की वैल्यू तय किए बिना कोई कुकी भेजी है, तो ब्राउज़र उस कुकी को SameSite=Lax पर सेट की गई कुकी के तौर पर इस्तेमाल करता है. हमारा सुझाव है कि आप SameSite=Lax को साफ़ तौर पर सेट करें, ताकि सभी ब्राउज़र पर उपयोगकर्ताओं को एक जैसा अनुभव मिल सके.

आपको अब भी अपनी क्रॉस-साइट कुकी को SameSite=None; Secure पर अपडेट करना होगा, जैसा कि अगले सेक्शन में बताया गया है.

SameSite=None सुरक्षित होना चाहिए

SameSite=None का इस्तेमाल करके अलग-अलग साइटों के लिए कुकी बनाते समय, आपको उन्हें Secure पर भी सेट करना होगा, ताकि ब्राउज़र उन्हें स्वीकार कर सके:

Set-Cookie: widget_session=abc123; SameSite=None; Secure

Chrome 76 और इसके बाद के वर्शन में, about://flags/#cookies-without-same-site-must-be-secure को चालू करके इस सुविधा को टेस्ट किया जा सकता है. इसके अलावा, Firefox 69 और इसके बाद के वर्शन में, about:config में जाकर network.cookie.sameSite.noneRequiresSecure को सेट करके भी इस सुविधा को टेस्ट किया जा सकता है.

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

SameSite=None में हुए इन बदलावों और ब्राउज़र के व्यवहार में अंतर को मैनेज करने के लिए, अपनी कुकी अपडेट करने के बारे में ज़्यादा जानकारी पाने के लिए, फ़ॉलो अप-लेख, SameSite कुकी रेसिपी देखें.

लिली चेन, माल्टे उबल, माइक वेस्ट, रॉब डॉडसन, टॉम स्टाइनर, और विवेक शेखर को उनके योगदान और सुझावों के लिए धन्यवाद.