वेब मैसेजिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 18: Line 18:


==उदाहरण                                                                                                                                                                                                                ==
==उदाहरण                                                                                                                                                                                                                ==
विचार करें कि हम दस्तावेज़ को लोड करना चाहते हैं <code>example.net</code> से लोड किए गए दस्तावेज़ B के साथ संचार करने के लिए <code>example.com</code> में <code>आईफ़्रेम</code> या पॉपअप विंडो.<ref name="WHATWG"/> दस्तावेज़ A के लिए [[जावास्क्रिप्ट]] इस प्रकार दिखाई देगी:
विचार करें कि हम दस्तावेज़ a को लोड करना चाहते हैं <code>example.net</code> से लोड किए गए दस्तावेज़ B के साथ संचार करने के लिए <code>example.com</code> में <code>आईफ़्रेम</code> या पॉपअप विंडो <ref name="WHATWG"/> दस्तावेज़ A के लिए [[जावास्क्रिप्ट]] इस प्रकार दिखाई देती है:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
var o = document.getElementsByTagName('iframe')[0];
var o = document.getElementsByTagName('iframe')[0];
o.contentWindow.postMessage('Hello B', 'http://example.com/');
o.contentWindow.postMessage('Hello B', 'http://example.com/');
</syntaxhighlight> हमारी उत्पत्ति <code>contentWindow</code> ऑब्जेक्ट को पास कर दिया गया है <code>postMessage</code>. यह मेल खाना चाहिए <code>origin</code> जिस दस्तावेज़ के साथ हम संचार करना चाहते हैं (इस मामले में, दस्तावेज़ बी)अन्यथा, सुरक्षा त्रुटि उत्पन्न हो जाएगी और स्क्रिप्ट बंद हो जाएगी।<ref name="INTRODUCING"/>दस्तावेज़ बी के लिए जावास्क्रिप्ट इस प्रकार दिखाई देगी:
</syntaxhighlight> हमारी उत्पत्ति <code>contentWindow</code> ऑब्जेक्ट को पास कर दिया गया है यह मेल <code>postMessage</code> खाना चाहिए जिस दस्तावेज़ <code>origin</code> के साथ हम संचार करना चाहते हैं (इस स्थिति में, दस्तावेज़ b) अन्यथा, सुरक्षा त्रुटि उत्पन्न हो जाएगी और स्क्रिप्ट विवृत हो जाती है <ref name="INTRODUCING"/> दस्तावेज़ b के लिए जावास्क्रिप्ट इस प्रकार दिखाई देती है:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
function receiver(event) {
function receiver(event) {
Line 36: Line 36:
window.addEventListener('message', receiver, false);
window.addEventListener('message', receiver, false);
</syntaxhighlight>
</syntaxhighlight>
दस्तावेज़ से संदेश प्राप्त करने के लिए ईवेंट श्रोता की स्थापना की जाती है। का उपयोग करना <code>origin</code> संपत्ति, यह तब जाँचता है कि प्रेषक का डोमेन अपेक्षित डोमेन है। दस्तावेज़ बी तब संदेश को देखता है, या तो इसे उपयोगकर्ता को प्रदर्शित करता है, या दस्तावेज़ के लिए स्वयं के संदेश के साथ प्रतिक्रिया देता है।<ref name="WHATWG"/>
दस्तावेज़ a से संदेश प्राप्त करने के लिए ईवेंट श्रोता की स्थापना की जाती है। का उपयोग करना <code>origin</code> प्रोपर्टी, यह तब जाँचता है कि प्रेषक का डोमेन अपेक्षित डोमेन है। दस्तावेज़ b तब संदेश को देखता है, या तो इसे उपयोगकर्ता को प्रदर्शित करता है, या दस्तावेज़ a के लिए स्वयं के संदेश के साथ प्रतिक्रिया देता है।<ref name="WHATWG"/>




==सुरक्षा==
==सुरक्षा==
खराब मूल जांच उन अनुप्रयोगों के लिए जोखिम पैदा कर सकती है जो क्रॉस-डॉक्यूमेंट मैसेजिंग का उपयोग करते हैं।<ref name="Security"/> विदेशी डोमेन से दुर्भावनापूर्ण कोड से बचाव के लिए, लेखकों को इसकी जाँच करनी चाहिए <code>origin</code> यह सुनिश्चित करने के लिए विशेषता कि संदेश उन डोमेन से स्वीकार किए जाते हैं जिनसे वे संदेश प्राप्त करने की अपेक्षा करते हैं। आने वाले डेटा का प्रारूप भी जांचा जाना चाहिए कि वह अपेक्षित प्रारूप से मेल खाता हो।<ref name="WHATWG"/>
व्यर्थ मूल जांच उन अनुप्रयोगों के लिए कठिन परिस्थिति उत्पन्न कर सकती है जो क्रॉस-डॉक्यूमेंट मैसेजिंग का उपयोग करते हैं।<ref name="Security"/> विदेशी डोमेन से दुर्भावनापूर्ण कोड से बचाव के लिए, लेखकों <code>origin</code> को इसकी जाँच करनी चाहिए  यह सुनिश्चित करने के लिए विशेषता कि संदेश उन डोमेन से स्वीकार किए जाते हैं जिनसे वे संदेश प्राप्त करने की अपेक्षा करते हैं। इस प्रकार आने वाले डेटा का प्रारूप भी जांचा जाना चाहिए कि वह अपेक्षित प्रारूप से मेल खाता हो।<ref name="WHATWG"/>




==समर्थन==
==समर्थन==
क्रॉस-डॉक्यूमेंट मैसेजिंग के लिए समर्थन [[इंटरनेट एक्सप्लोरर]], [[मोज़िला फ़ायरफ़ॉक्स]], सफारी (वेब ​​​​ब्राउज़र), Google क्रोम, ओपेरा (वेब ​​​​ब्राउज़र), [[ ऑपेरा मिनी |ऑपेरा मिनी]] , [[ओपेरा मोबाइल]] और [[एंड्रॉइड (ऑपरेटिंग सिस्टम)]] के वर्तमान संस्करणों में मौजूद है।<ref name="canIuse"/>एपीआई के लिए समर्थन ट्राइडेंट (लेआउट इंजन), [[गेको (लेआउट इंजन)]], [[वेबकिट]] और [[प्रेस्टो (लेआउट इंजन)]] लेआउट इंजन में मौजूद है।<ref name="SUPPORT"/>
क्रॉस-डॉक्यूमेंट मैसेजिंग के लिए समर्थन [[इंटरनेट एक्सप्लोरर]], [[मोज़िला फ़ायरफ़ॉक्स]], सफारी (वेब ​​​​ब्राउज़र), गूगल क्रोम, ओपेरा (वेब ​​​​ब्राउज़र), [[ ऑपेरा मिनी |ऑपेरा मिनी]] , [[ओपेरा मोबाइल]] और [[एंड्रॉइड (ऑपरेटिंग सिस्टम)]] के वर्तमान संस्करणों में उपस्थित है।<ref name="canIuse"/> इस प्रकार प्एरकारपीआई के लिए समर्थन ट्राइडेंट (लेआउट इंजन), [[गेको (लेआउट इंजन)]], [[वेबकिट]] और [[प्रेस्टो (लेआउट इंजन)]] लेआउट इंजन में उपस्थित है।<ref name="SUPPORT"/>




==यह भी देखें==
==यह भी देखें                                                                                                                                                                                 ==
* क्रॉस साइट स्क्रिप्टिंग
* क्रॉस साइट स्क्रिप्टिंग
* [[क्रॉस साइट अनुरोध जालसाजी]]
* [[क्रॉस साइट अनुरोध जालसाजी]]
* समान-मूल नीति
* समान-मूल नीति
* [[क्रॉस-ओरिजिन संसाधन साझाकरण]]
* [[क्रॉस-ओरिजिन संसाधन साझाकरण]]
* [[JSONP]]
* [[JSONP|जेएसओएनपी]]


==संदर्भ==
==संदर्भ==

Revision as of 11:09, 16 July 2023

वेब मैसेजिंग या क्रॉस-डॉक्यूमेंट मैसेजिंग, डब्ल्यूएचएटीडब्ल्यूजी एचटीएमएल5 ड्राफ्ट विनिर्देश में प्रस्तुत की गई एपीआई है, जो दस्तावेज़ों को विभिन्न मूल, या स्रोत डोमेन में दूसरे के साथ संचार करने की अनुमति देती है।[1] जबकि वेब ब्राउज़र में प्रस्तुत किया गया था। एचटीएमएल5 से पहले, सुरक्षा आक्रमण से बचाने के लिए, वेब ब्राउज़र क्रॉस साइट स्क्रिप्टिंग की अनुमति नहीं देते थे। इस प्रथा ने गैर-शत्रुतापूर्ण पृष्ठों के बीच संचार पर भी रोक लगा दी थी, जिससे किसी भी प्रकार की दस्तावेज़ प्रदान करना कठिन हो गई थी।[1][2] क्रॉस-डॉक्यूमेंट मैसेजिंग स्क्रिप्ट को सुरक्षा का प्राथमिक स्तर प्रदान करते हुए, इन सीमाओं के पार प्रदान करने की अनुमति देती है।

आवश्यकताएँ और विशेषताएँ

मैसेजिंग एपीआई का उपयोग करना postMessage विधि, साधारण टेक्स्ट संदेश डोमेन से दूसरे डोमेन पर भेजा जा सकता है, उदाहरण. मूल दस्तावेज़ से आईफ़्रेम तक उपयोग किया जाता है।[3] इसके लिए आवश्यक है कि लेखक पहले इसे Window प्राप्त करे और प्राप्त दस्तावेज़ का उद्देश्य सही होता है। परिणामस्वरूप, संदेश निम्नलिखित पर पोस्ट किए जा सकते हैं:[2]

प्रेषक दस्तावेज़ की विंडो के अन्दर अन्य फ़्रेम या आईफ़्रेम

  • प्रेषक दस्तावेज़ स्पष्ट रूप से जावास्क्रिप्ट कॉल के माध्यम से खुलता है
  • प्रेषक दस्तावेज़ की मूल विंडो
  • वह विंडो जिसमें प्रेषक दस्तावेज़ खुलता है

संदेश event प्राप्त होने में निम्नलिखित विशेषताएं हैं:

  • data - आने वाले संदेश का डेटा, या वास्तविक कंटेंट।
  • origin - प्रेषक दस्तावेज़ की उत्पत्ति इसमें सामान्यतः योजना, होस्टनाम और पोर्ट सम्मिलित होते हैं। इसमें पथ या खंड पहचानकर्ता सम्मिलित नहीं है.[1]
  • source - द WindowProxy दस्तावेज़ कहां से आया (स्रोत विंडो)।

postMessage यह कोई ब्लॉकिंग कॉल नहीं है; संदेशों को अतुल्यकालिक रूप से संसाधित किया जाता है।[4]


उदाहरण

विचार करें कि हम दस्तावेज़ a को लोड करना चाहते हैं example.net से लोड किए गए दस्तावेज़ B के साथ संचार करने के लिए example.com में आईफ़्रेम या पॉपअप विंडो [1] दस्तावेज़ A के लिए जावास्क्रिप्ट इस प्रकार दिखाई देती है:

var o = document.getElementsByTagName('iframe')[0];
o.contentWindow.postMessage('Hello B', 'http://example.com/');

हमारी उत्पत्ति contentWindow ऑब्जेक्ट को पास कर दिया गया है यह मेल postMessage खाना चाहिए जिस दस्तावेज़ origin के साथ हम संचार करना चाहते हैं (इस स्थिति में, दस्तावेज़ b) अन्यथा, सुरक्षा त्रुटि उत्पन्न हो जाएगी और स्क्रिप्ट विवृत हो जाती है [3] दस्तावेज़ b के लिए जावास्क्रिप्ट इस प्रकार दिखाई देती है:

function receiver(event) {
    if (event.origin == 'http://example.net') {
        if (event.data == 'Hello B') {
            event.source.postMessage('Hello A, how are you?', event.origin);
        }
        else {
            alert(event.data);
        }
    }
}
window.addEventListener('message', receiver, false);

दस्तावेज़ a से संदेश प्राप्त करने के लिए ईवेंट श्रोता की स्थापना की जाती है। का उपयोग करना origin प्रोपर्टी, यह तब जाँचता है कि प्रेषक का डोमेन अपेक्षित डोमेन है। दस्तावेज़ b तब संदेश को देखता है, या तो इसे उपयोगकर्ता को प्रदर्शित करता है, या दस्तावेज़ a के लिए स्वयं के संदेश के साथ प्रतिक्रिया देता है।[1]


सुरक्षा

व्यर्थ मूल जांच उन अनुप्रयोगों के लिए कठिन परिस्थिति उत्पन्न कर सकती है जो क्रॉस-डॉक्यूमेंट मैसेजिंग का उपयोग करते हैं।[5] विदेशी डोमेन से दुर्भावनापूर्ण कोड से बचाव के लिए, लेखकों origin को इसकी जाँच करनी चाहिए यह सुनिश्चित करने के लिए विशेषता कि संदेश उन डोमेन से स्वीकार किए जाते हैं जिनसे वे संदेश प्राप्त करने की अपेक्षा करते हैं। इस प्रकार आने वाले डेटा का प्रारूप भी जांचा जाना चाहिए कि वह अपेक्षित प्रारूप से मेल खाता हो।[1]


समर्थन

क्रॉस-डॉक्यूमेंट मैसेजिंग के लिए समर्थन इंटरनेट एक्सप्लोरर, मोज़िला फ़ायरफ़ॉक्स, सफारी (वेब ​​​​ब्राउज़र), गूगल क्रोम, ओपेरा (वेब ​​​​ब्राउज़र), ऑपेरा मिनी , ओपेरा मोबाइल और एंड्रॉइड (ऑपरेटिंग सिस्टम) के वर्तमान संस्करणों में उपस्थित है।[6] इस प्रकार प्एरकारपीआई के लिए समर्थन ट्राइडेंट (लेआउट इंजन), गेको (लेआउट इंजन), वेबकिट और प्रेस्टो (लेआउट इंजन) लेआउट इंजन में उपस्थित है।[7]


यह भी देखें

संदर्भ

  1. 1.0 1.1 1.2 1.3 1.4 1.5 Cross-Document Messaging – HTML Draft Standard
  2. 2.0 2.1 WebKit DOM Programming Topics - Cross Document Messaging[dead link]
  3. 3.0 3.1 Remy, Sharp, Messages, Workers, and Sockets, Introducing HTML5, New Riders, 2011, p. 197-199
  4. "HTML5 Web Messaging".
  5. HTML5 Security in a Nutshell
  6. When can I use Cross-Document Messaging?
  7. A Selection of Supported Features in HTML5[dead link]


बाहरी संबंध