SameSite कुकी रेसिपी

Chrome, Firefox, एज, साथ ही, अन्य संगठन भी आईईटीएफ़ के मुताबिक अपने डिफ़ॉल्ट व्यवहार में बदलाव कर रहे हैं प्रस्ताव, बेहतर कुकी ताकि:

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

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

ब्राउज़र सहायता

  • Chrome: 51. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • एज: 16. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • Firefox: 60. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • सफ़ारी: 13. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

सोर्स

अलग-अलग साइट या तीसरे पक्ष की कुकी के लिए इस्तेमाल के उदाहरण

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

<iframe> में मौजूद कॉन्टेंट

<iframe> में दिखाई गई किसी दूसरी साइट का कॉन्टेंट, तीसरे पक्ष के प्लैटफ़ॉर्म पर मौजूद है संदर्भ. इस्तेमाल के सामान्य उदाहरणों में ये शामिल हैं:

  • एम्बेड किया गया ऐसा कॉन्टेंट जिसे दूसरी साइटों से शेयर किया गया है, जैसे कि वीडियो, मैप, कोड सैंपल, सोशल मीडिया पर पोस्ट दिखते हैं.
  • बाहरी सेवाओं के विजेट. जैसे, पेमेंट, कैलेंडर, बुकिंग, और बुकिंग की सुविधाएं.
  • विजेट, जैसे कि सोशल मीडिया बटन या धोखाधड़ी रोकने वाली सेवाएं, जिनकी वजह से लोगों को साफ़ तौर पर जानकारी नहीं मिलती <iframes>.

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

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

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

"असुरक्षित" सभी साइटों से मिले अनुरोध

"असुरक्षित" सुनने में थोड़ा अजीब लग सकता है, लेकिन यहां ऐसे अनुरोध के बारे में बताया गया है जो राज्य को बदलने के मकसद से नहीं बनाया गया है. वेब पर, वह मुख्य रूप से पीओएसटी अनुरोध होते हैं. कुकी SameSite=Lax के तौर पर मार्क किए गए मैसेज, सुरक्षित टॉप-लेवल नेविगेशन पर भेजे जाते हैं. जैसे: किसी दूसरी साइट पर जाने के लिए इस लिंक पर क्लिक करें. हालांकि, इसके लिए <form> सबमिशन जैसा कुछ पीओएसटी का इस्तेमाल करने वाली किसी दूसरी साइट में कुकी शामिल नहीं होती हैं.

एक पेज से दूसरे पेज पर जाने वाले अनुरोध का डायग्राम.
अगर इनकमिंग अनुरोध "सुरक्षित" का इस्तेमाल करता है तरीका है, तो पेज कुकी भेजता है.

इस पैटर्न का इस्तेमाल उन साइटों के लिए किया जाता है जो लोगों को रिमोट पर रीडायरेक्ट कर सकती हैं वापस आने से पहले कुछ कार्रवाई करने के लिए सेवा. उदाहरण के लिए, पर रीडायरेक्ट करना तीसरे पक्ष का आइडेंटिटी प्रोवाइडर होना चाहिए. उपयोगकर्ता के साइट छोड़ने से पहले, कुकी ऐसे सेट में जिसमें सिंगल यूज़ टोकन शामिल है और माना जाता है कि यह टोकन को कम करने के लिए, लौटने वाले अनुरोध की जांच की गई क्रॉस साइट अनुरोध जालसाज़ी (सीएसआरएफ) हमले. यदि वह फिर से अनुरोध करने का अनुरोध POST के माध्यम से आता है, तो आपको SameSite=None; Secure जैसी कुकी.

रिमोट रिसॉर्स

पेज पर मौजूद कोई भी रिमोट संसाधन, जैसे कि <img> टैग या <script> टैग से, अनुरोध के साथ भेजी जाने वाली कुकी पर निर्भर हो सकता है. आम तौर पर, इस्तेमाल के ये उदाहरण यहां दिए जाते हैं ट्रैकिंग पिक्सल और मनमुताबिक कॉन्टेंट बनाने की सुविधा शामिल है.

यह fetch या XMLHttpRequest. अगर fetch() को credentials: 'include' विकल्प, हो सकता है कि उन अनुरोधों में कुकी शामिल हों. XMLHttpRequest के लिए, अनुमानित कुकी आम तौर पर withCredentials वैल्यू true के लिए. उन कुकी को में शामिल किए जाने के लिए उचित रूप से चिह्नित किया जाना चाहिए दूसरी साइटों से मिले अनुरोध.

वेबव्यू में मौजूद कॉन्टेंट

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

Android, अपने प्लैटफ़ॉर्म के हिसाब से भी ऐप्लिकेशन को कुकी सेट करने की सुविधा देता है. इसके लिए, CookieManager एपीआई. हेडर या JavaScript का इस्तेमाल करके सेट की गई कुकी की तरह ही, इन दोनों को शामिल करने पर विचार करें SameSite=None; Secure अगर वे दूसरी साइट के इस्तेमाल के लिए हैं.

SameSite को आज ही लागू करने का तरीका

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

Set-Cookie: first_party_var=value; SameSite=Lax

तीसरे पक्ष के कॉन्टेक्स्ट में ज़रूरी कुकी को SameSite=None; Secure. दोनों एट्रिब्यूट ज़रूरी हैं. अगर आप Secure का इस्तेमाल न करने पर, None कुकी अस्वीकार कर दी जाएगी. अंतर का हिसाब लगाने के लिए इस्तेमाल करने की ज़रूरत है, तो आपको अपने सिस्टम को बेहतर बनाने के लिए काम न करने वाले क्लाइंट को मैनेज करना में बताई गई रणनीतियां.

Set-Cookie: third_party_var=value; SameSite=None; Secure

असंगत क्लाइंट को हैंडल करें

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

इसका एक संभावित समाधान यह है कि आप हर कुकी को नई और पुरानी, दोनों ही स्टाइल में सेट करें:

Set-cookie: 3pcookie=value; SameSite=None; Secure
Set-cookie: 3pcookie-legacy=value; Secure

नया तरीका लागू करने वाले ब्राउज़र, कुकी को SameSite के साथ सेट करते हैं वैल्यू. जो ब्राउज़र नया व्यवहार लागू नहीं करते हैं, वे उस मान को अनदेखा कर देते हैं और 3pcookie-legacy कुकी. शामिल कुकी को प्रोसेस करते समय, आपकी साइट को चाहिए पहले कुकी की नई स्टाइल की मौजूदगी की जांच करें और फिर वापस आकर क्योंकि उसे कोई नई कुकी नहीं मिल रही है, तो पुरानी कुकी.

नीचे दिए गए उदाहरण में, एक्सप्रेस फ़्रेमवर्क और इसके cookie-parser मिडलवेयर:

const express = require('express');
const cp = require('cookie-parser');
const app = express();
app.use(cp());

app.get('/set', (req, res) => {
  // Set the new style cookie
  res.cookie('3pcookie', 'value', { sameSite: 'none', secure: true });
  // And set the same value in the legacy cookie
  res.cookie('3pcookie-legacy', 'value', { secure: true });
  res.end();
});

app.get('/', (req, res) => {
  let cookieVal = null;

  if (req.cookies['3pcookie']) {
    // check the new style cookie first
    cookieVal = req.cookies['3pcookie'];
  } else if (req.cookies['3pcookie-legacy']) {
    // otherwise fall back to the legacy cookie
    cookieVal = req.cookies['3pcookie-legacy'];
  }

  res.end();
});

app.listen(process.env.PORT);

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

एक विकल्प के तौर पर, उपयोगकर्ता एजेंट स्ट्रिंग का इस्तेमाल करके क्लाइंट की पहचान की जा सकती है. ऐसा तब किया जा सकता है, जब Set-Cookie हेडर भेजा गया. देखें काम न करने वाले क्लाइंट की सूची, और अपने प्लैटफ़ॉर्म के लिए, उपयोगकर्ता एजेंट की पहचान करने वाली सही लाइब्रेरी का इस्तेमाल करें, उदाहरण के लिए, ua-parser-js लाइब्रेरी Node.js पर इस तरीके से, आपको सिर्फ़ एक बदलाव करना होगा, लेकिन उपयोगकर्ता एजेंट हो सकता है कि स्निफ़िंग की सुविधा, उन सभी उपयोगकर्ताओं को न पहचान पाए जिन पर इसका असर हुआ है.

भाषाओं, लाइब्रेरी, और फ़्रेमवर्क में SameSite=None की सुविधा

ज़्यादातर भाषाएं और लाइब्रेरी,SameSite कुकी हैं. हालांकि, SameSite=None को जोड़ना अब भी तुलनात्मक रूप से हाल ही में, आपको कुछ मानक व्यवहार पर काम करना पड़ सकता है. इन गतिविधियों के बारे में, GitHub पर डेटा स्टोर करने के SameSite उदाहरण.

सहायता पाना

कुकी का इस्तेमाल वेब पर हर जगह किया जाता है. ऐसा किसी भी डेवलपमेंट टीम को नहीं किया जाता उन्हें इस बात की पूरी जानकारी होनी चाहिए कि उनकी साइट उन्हें कहां सेट और इस्तेमाल करती है, खास तौर पर का इस्तेमाल करता है. जब आपको कोई समस्या आती है, तो हो सकता है कि यह पहली बार हो किसी को भी यह समस्या आई है, इसलिए बेझिझक हमसे संपर्क करें: