Veb razmena poruka

Veb razmena poruka ili unakrsna razmena dokumenata je API uveden u standardu WHATWG HTML5, omogućavajući tako dokumentima da komuniciraju jedni sa drugima preko različitih porekla ili izvornih domena[1] , kada se prikazuju u veb-pregledaču. Pre HTML5 verzije, veb pregledači nisu dozvoljavali tzv. unakrsno-sajt skriptovanje radi zaštite od bezbednosnih napada. Dobro je poznato da ova praksa zabrane komunikacije između ne-neprijateljskih strana otežava bilo koju interakciju među dokumentima.[1][2] Veb razmena poruka omogućava skriptama da komuniciraju preko tih granica, pružajući osnovni nivo sigurnosti.

Zahtevi i atributi

uredi

Koristeći metod postmessage ovog API-ja, tekstualne poruke mogu biti poslate sa jednog domena na drugi, na primer, iz roditeljskog dokumenta ka iframe prozoru.[3] Zahtev za ovo je da autor prvo mora da dobije Window objekat dokumenata prijema. Kao rezultat toga, poruke mogu biti postavljene na sledeće:[2]

  • druge okvire ili okvire unutar prozora pošiljalaca dokumenta
  • prozore koje pošiljalac dokumenata eksplicitno otvori kroz JavaScript pozive
  • prozor roditelja pošiljaoca dokumenta
  • prozor koji otvara pošiljalac dokumenta

Poruka event koja pristiže, ima sledeće atribute:

  • data — Podaci, ili stvarni sadržaj, dolazne poruke.
  • origin — Poreklo pošiljaoca dokumenta. To obično uključuje šemu, ime hosta i port. On ne uključuje putanju ili identifikator fragmenata.[1]
  • source — u WindowProxy, odakle je ovaj dokument došao (izvorni prozor).

Метод postmessage ne blokira poziv; poruke se obrađuju asinhrono.[4]

Primer

uredi

Sledeći slučaj će biti razmatran: želi se da dokument A koji je učitan iz example.net komunicira sa dokumentom B koji je učitan iz example.com u određeni iframe прозор ili iskačući prozor.[1] U jeziku JavaScript kod za dokument A će imati sledeći oblik:

var o = document.getElementsByTagName('iframe')[0];

o.contentWindow.postMessage('Hello B', 'http://example.com/');

Poreklo contentWindow objekta je prosleđeno методи postmessage. On mora da odgovara пореклу dokumenta sa kojim se želi da komunicira (u ovom slučaju, dokument B). U suprotnom će biti ispaljena bezbednosna greška i kod iz skripte će prestati da se izvršava.[3] JavaScript kod za dokument B će izgledati ovako:

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);

Događaj slušaoca je podešen da prima poruke od dokumenta A. Koristeći порекло vrši se provera da li je domen pošiljaoca zapravo i očekivani domen. Dokument B zatim pregleda poruku, ili je prikazuje korisniku, ili sam odgovara porukom dokumentu A.[1]

Bezbednost

uredi

Slaba provera porekla može predstavljati rizik za aplikacije koje upotrebaljavaju ovakav način unakrsne razmene dokumenata.[5] Da bi bili zaštićeni od zlonamernog koda od strane drugih domena, autori bi trebalo da provere atribut порекла kako bi se osiguralo da poruke primljene od strane drugih domena budu proverene odakle dolaze. Format dolaznih podataka takođe treba biti proveren, da li se poklapa sa formatom očekivanih podataka.[1]

Podrška

uredi

Podrška za unakrsnu razmenu dokumenata postoji u sadašnjim verzijama Internet eksplorer, Mozila fajerfoks, Safari, Gugl kroum, Opera, Opera Mini, Opera Mobil i Android veb pregledač.[6] Podrška za API postoji u Trident, Geko, kombinovanjem Vebkita i Presta.[7]

Vidi još

uredi

Reference

uredi
  1. ^ a b v g d đ Cross-Document Messaging — HTML Draft Standard
  2. ^ a b WebKit DOM Programming Topics — Cross Document Messaging
  3. ^ a b Remy, Sharp, Messages, Workers, and Sockets, Introducing HTML5, New Riders, (2011). str. 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. Arhivirano iz originala 12. 11. 2011. g. Pristupljeno 29. 05. 2016. 

Spoljašnje veze

uredi