"same-site" और "same-origin" को समझना

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

शुरुआत की जगह

शुरुआत की जगह

"ऑरिजिन", एक स्कीम (जिसे प्रोटोकॉल भी कहा जाता है, जैसे कि एचटीटीपी या एचटीटीपीएस), होस्टनेम, और पोर्ट (अगर इनके बारे में बताया गया हो) का कॉम्बिनेशन होता है. उदाहरण के लिए, https://www.example.com:443/foo का यूआरएल दिया गया है, तो "ऑरिजिन" https://www.example.com:443 है.

"समान-शुरुआत की जगह" और "क्रॉस-ऑरिजिन"

एक ही स्कीम, होस्टनेम, और पोर्ट के कॉम्बिनेशन वाली वेबसाइटों को "एक ही ऑरिजिन" माना जाता है. बाकी सब कुछ "क्रॉस-ऑरिजिन" माना जाता है.

शुरुआत की जगह A ऑरिजिन B यह पता लगाने के लिए कि ऑरिजिन A और B, "एक ही ऑरिजिन" हैं या "क्रॉस-ऑरिजिन"
https://www.example.com:443 https://www.evil.com:443 क्रॉस-ऑरिजिन: अलग-अलग डोमेन
https://example.com:443 क्रॉस-ऑरिजिन: अलग-अलग सबडोमेन
https://login.example.com:443 क्रॉस-ऑरिजिन: अलग-अलग सबडोमेन
http://www.example.com:443 क्रॉस-ऑरिजिन: अलग-अलग स्कीम
https://www.example.com:80 क्रॉस-ऑरिजिन: अलग-अलग पोर्ट
https://www.example.com:443 एक ही-ऑरिजिन: एग्ज़ैक्ट मैच
https://www.example.com same-origin: इंप्लिसिट पोर्ट नंबर (443) मैच होता है

साइट

साइट (TLD+1)

.com और .org जैसे टॉप लेवल डोमेन (टीएलडी) रूट ज़ोन डेटाबेस में शामिल हैं. ऊपर दिए गए उदाहरण में, "साइट", स्कीम, टीएलडी, और डोमेन के ठीक पहले वाले हिस्से का कॉम्बिनेशन है (हम इसे TLD+1 कहते हैं). उदाहरण के लिए, अगर https://www.example.com:443/foo यूआरएल दिया गया है , तो "साइट" https://example.com है.

सार्वजनिक सफ़िक्स सूची और ईटीएलडी

जिन डोमेन में .co.jp या .github.io जैसी चीज़ें शामिल हैं उनके लिए, "साइट" की पहचान करने के लिए सिर्फ़ .jp या .io का इस्तेमाल करना काफ़ी नहीं है. किसी खास टीएलडी के लिए, रजिस्टर किए जा सकने वाले डोमेन का लेवल, एल्गोरिदम के हिसाब से तय करने का कोई तरीका नहीं है. इसलिए, सार्वजनिक सफ़िक्स सूची में तय किए गए पब्लिक सफ़िक्स की एक सूची बनाई गई. इन पब्लिक सफ़िक्स को असरदार टीएलडी (ईटीएलडी) भी कहा जाता है. ईटीएलडी की सूची publicsuffix.org/list पर दी गई है.

जिस डोमेन में ई-टीएलडी शामिल है उसके "साइट" वाले हिस्से की पहचान करने के लिए, .com वाले उदाहरण जैसा ही लागू करें. https://www.project.github.io:443/foo का उदाहरण लेते हैं, स्कीम https है, eTLD .github.io है, eTLD+1 project.github.io है, इसलिए https://project.github.io को इस यूआरएल के लिए "साइट" माना गया है.

साइट (eTLD+1)

"एक ही साइट" और "क्रॉस-साइट"

एक जैसी स्कीम और एक ही eTLD+1 वाली वेबसाइटों को "एक ही साइट" माना जाता है. अलग स्कीम या अलग eTLD+1 वाली वेबसाइटें, "क्रॉस-साइट" होती हैं.

शुरुआत की जगह A ऑरिजिन B यह पता लगाने के लिए कि ऑरिजिन A और B, "एक ही साइट" हैं या "क्रॉस-साइट"
https://www.example.com:443 https://www.evil.com:443 क्रॉस-साइट: अलग-अलग डोमेन
https://login.example.com:443 एक ही साइट: अलग-अलग सबडोमेन से कोई फ़र्क़ नहीं पड़ता
http://www.example.com:443 क्रॉस-साइट: अलग-अलग योजनाएं
https://www.example.com:80 एक ही साइट: अलग-अलग पोर्ट से कोई फ़र्क़ नहीं पड़ता
https://www.example.com:443 एक ही साइट: एग्ज़ैक्ट मैच
https://www.example.com एक ही साइट: पोर्ट से कोई फ़र्क़ नहीं पड़ता

"एक ही साइट के लिए बिना किसी विज्ञापन की तकनीक"

स्कीमलेस समान साइट

"सेम-साइट" की परिभाषा को इस तरह से बेहतर बनाया गया है कि यूआरएल स्कीम को साइट का हिस्सा माना जाए. ऐसा इसलिए किया जाता है, ताकि एचटीटीपी को कमज़ोर चैनल के तौर पर इस्तेमाल न किया जा सके. स्कीम की तुलना के बिना "एक ही साइट" के पुराने सिद्धांत को अब "बिना स्कीम वाली समान साइट" कहा जाता है. उदाहरण के लिए, http://www.example.com और https://www.example.com को एक ही साइट के लिए स्कीमलेस माना जाता है, लेकिन एक ही साइट का नहीं. ऐसा इसलिए, क्योंकि सिर्फ़ eTLD+1 वाला हिस्सा मायने रखता है और स्कीम पर ध्यान नहीं दिया जाता.

शुरुआत की जगह A ऑरिजिन B यह पता करना कि क्या मूल A और B "समान साइट" हैं या नहीं
https://www.example.com:443 https://www.evil.com:443 क्रॉस-साइट: अलग-अलग डोमेन
https://login.example.com:443 एक जैसी साइट: अलग-अलग सबडोमेन से कोई फ़र्क़ नहीं पड़ता
http://www.example.com:443 एक ही साइट में बिना किसी बदलाव वाली साइट: अलग-अलग स्कीम से कोई फ़र्क़ नहीं पड़ता
https://www.example.com:80 एक ही साइट में बिना स्कीम वाले: अलग-अलग पोर्ट से कोई फ़र्क़ नहीं पड़ता
https://www.example.com:443 एक ही साइट के बिना स्कीम: एग्ज़ैक्ट मैच
https://www.example.com एक ही साइट में बिना स्कीम वाले: पोर्ट से कोई फ़र्क़ नहीं पड़ता

यह कैसे पता करें कि अनुरोध "एक ही साइट", "एक ही-शुरुआत" या "क्रॉस-साइट" है या नहीं

सभी आधुनिक ब्राउज़र (Safari पर जल्द ही लैंडिंग काम करता है) Sec-Fetch-Site एचटीटीपी हेडर के साथ अनुरोध भेजते हैं. हेडर में, इनमें से कोई एक वैल्यू होनी चाहिए:

  • cross-site
  • same-site
  • same-origin
  • none

Sec-Fetch-Site की वैल्यू की जांच करके, यह पता लगाया जा सकता है कि अनुरोध, "same-site", "same-origin" या "क्रॉस-साइट" में से क्या है.