एक ही ऑरिजिन वाले Wasm मॉड्यूल को प्रतिबंधित करें

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

एक ही साइट, लेकिन क्रॉस-ऑरिजिन एनवायरमेंट के बीच WebAssembly (Wasm) मॉड्यूल शेयर करना एजेंट क्लस्टर को अनुमति देने के लिए इस्तेमाल नहीं किया जा सकता लंबी अवधि के ऑरिजिन के लिए हैं. ऐसे डेवलपर जो Wasm मॉड्यूल का इस्तेमाल ऐसे मामलों में कर रहे हैं जारी रखने के लिए यह सुनिश्चित करना होगा कि उन मॉड्यूल को समान-मूल पर इंस्टैंशिएट किया जाए Chrome 95 के बाद उन्हें इस्तेमाल करने से कैसे बचें.

Wasm मॉड्यूल क्या हैं और ये कैसे काम करते हैं

WebAssembly प्रोग्राम, मॉड्यूल में व्यवस्थित किए जाते हैं. ये मॉड्यूल डिप्लॉयमेंट, लोडिंग, और कंपाइलेशन.

नीचे दिए गए उदाहरण कोड में, एक Wasm मॉड्यूल https://iframe.site.example को इसके ज़रिए https://main.site.example के साथ शेयर किया गया postMessage(). ध्यान दें कि ये डोमेन एक ही साइट के हैं, लेकिन क्रॉस-ऑरिजिन हैं.

https://iframe.site.example पर Wasm मॉड्यूल:

(async () => {
  const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
  iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();

Chrome 95 और इसके बाद के वर्शन में, ईमेल भेजने वाले और पाने वाले व्यक्ति का ऑरिजिन एक ही होना चाहिए. तय सीमा में ऊपर दिए गए मामले में, https://iframe.site.example https://main.site.example या दूसरी तरफ़ से.

यह क्यों ज़रूरी है

Chrome, इन पेजों पर अलग-अलग टैब, फ़्रेम, और दस्तावेज़ों को अंदरूनी तौर पर मैनेज करता रहा है Site-keyed agent clusters. इसका मतलब है कि एक ही साइट के दस्तावेज़ों को एक जैसी ही प्रक्रिया (यह कैसे काम करता है, हर ब्राउज़र के हिसाब से अलग-अलग होता है). हाल ही में, Chrome ने उन्हें ज़्यादा सटीक इकाइयों में मैनेज करना शुरू कर दिया है: ऑरिजिन. हम इसे कहते हैं origin-keyed agent clusters. हालांकि, ऐसा करना संसाधन महंगा होता है, इसलिए Origin-keyed agent clusters सिर्फ़ सीमित वेबसाइटों पर अनुमान के मुताबिक लागू किए गए.

हमारी योजना है कि सभी एजेंट क्लस्टर को डिफ़ॉल्ट रूप से ऑरिजिन-की बनाया जाए. कार्रवाई करने के लिए इसलिए, हमें उन सुविधाओं पर पाबंदी लगानी होगी जिनके लिए Site-key की ज़रूरत होती है ऑरिजिन क्लस्टर:

  • (सिर्फ़ Chrome के लिए) अब नहीं भेजी जा सकती SharedArrayBuffer या WebAssembly.Memory ऑब्जेक्ट को उसी साइट के क्रॉस-ऑरिजिन वाले अन्य पेजों पर ले जाते हैं. यह पहले से ही Chrome 92 के बाद से मौजूद है.
  • अब नहीं भेजा जा सकता WebAssembly.Module ऑब्जेक्ट को postMessage() के ज़रिए, उसी साइट के क्रॉस-ऑरिजिन पेजों पर ले जाते हैं. यह बदलाव ज़्यादा जानकारी नीचे दी गई है..
  • अब सेट नहीं किया जा सकता document.domain. यह एक लेगसी सुविधा है, जो आम तौर पर एक जैसी साइट के क्रॉस-ऑरिजिन पेजों को एक-दूसरे के DOM को सिंक्रोनस ऐक्सेस करते हैं, लेकिन Origin-keyed agent clusters में बंद है.

ऊपर दिए गए सभी बदलावों को ध्यान में रखते हुए, Chrome, Origin-keyed agent का इस्तेमाल करेगा क्लस्टर डिफ़ॉल्ट रूप से.

Origin-keyed agent clusters के बारे में ज़्यादा जानने के लिए, Origin-Agent-Cluster हेडर की मदद से परफ़ॉर्मेंस आइसोलेशन का अनुरोध करना देखें.

अगले चरण और संसाधन

Chrome डिफ़ॉल्ट रूप से, Origin-keyed agent clusters के साथ काम करे, इसके लिए document.domain को रीड ओनली बनाएं. Chrome टीम का लक्ष्य, यह बदलाव करना है उन्होंने कभी ऐसा किया.

मार्कस विंकलर की खींची गई फ़ोटो तारीख अनस्प्लैश