Пређи на садржај

Веб размена порука

С Википедије, слободне енциклопедије

Веб размена порука или унакрсна размена докумената је АПИ уведен у стандарду WHATWG HTML5, омогућавајући тако документима да комуницирају једни са другима преко различитих порекла или изворних домена[1] , када се приказују у веб-прегледачу. Пре HTML5 верзије, веб прегледачи нису дозвољавали тзв. унакрсно-сајт скриптовање ради заштите од безбедносних напада. Добро је познато да ова пракса забране комуникације између не-непријатељских страна отежава било коју интеракцију међу документима.[1][2] Веб размена порука омогућава скриптама да комуницирају преко тих граница, пружајући основни ниво сигурности.

Захтеви и атрибути

[уреди | уреди извор]

Користећи метод postmessage овог АПИ-ја, текстуалне поруке могу бити послате са једног домена на други, на пример, из родитељског документа ка iframe прозору.[3] Захтев за ово је да аутор прво мора да добије Window објекат докумената пријема. Као резултат тога, поруке могу бити постављене на следеће:[2]

  • друге оквире или оквире унутар прозора пошиљалаца документа
  • прозоре које пошиљалац докумената експлицитно отвори кроз JavaScript позиве
  • прозор родитеља пошиљаоца документа
  • прозор који отвара пошиљалац документа

Порука event која пристиже, има следеће атрибуте:

  • data — Подаци, или стварни садржај, долазне поруке.
  • origin — Порекло пошиљаоца документа. То обично укључује шему, име хоста и порт. Он не укључује путању или идентификатор фрагмената.[1]
  • source — у WindowProxy, одакле је овај документ дошао (изворни прозор).

Метод postmessage не блокира позив; поруке се обрађују асинхроно.[4]

Следећи случај ће бити разматран: жели се да документ А који је учитан из example.net комуницира са документом Б који је учитан из example.com у одређени iframe прозор или искачући прозор.[1] У језику JavaScript код за документ А ће имати следећи облик:

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

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

Порекло contentWindow објекта је прослеђено методи postmessage. Он мора да одговара пореклу документа са којим се жели да комуницира (у овом случају, документ Б). У супротном ће бити испаљена безбедносна грешка и код из скрипте ће престати да се извршава.[3] JavaScript код за документ Б ће изгледати овако:

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

Догађај слушаоца је подешен да прима поруке од документа А. Користећи порекло врши се провера да ли је домен пошиљаоца заправо и очекивани домен. Документ Б затим прегледа поруку, или је приказује кориснику, или сам одговара поруком документу А.[1]

Безбедност

[уреди | уреди извор]

Слаба провера порекла може представљати ризик за апликације које употребаљавају овакав начин унакрсне размене докумената.[5] Да би били заштићени од злонамерног кода од стране других домена, аутори би требало да провере атрибут порекла како би се осигурало да поруке примљене од стране других домена буду проверене одакле долазе. Формат долазних података такође треба бити проверен, да ли се поклапа са форматом очекиваних података.[1]

Подршка за унакрсну размену докумената постоји у садашњим верзијама Интернет експлорер, Мозила фајерфокс, Сафари, Гугл кроум, Опера, Опера Мини, Опера Мобил и Андроид веб прегледач.[6] Подршка за API постоји у Тридент, Геко, комбиновањем Вебкита и Преста.[7]

Референце

[уреди | уреди извор]
  1. ^ а б в г д ђ Cross-Document Messaging — HTML Draft Standard
  2. ^ а б WebKit DOM Programming Topics — Cross Document Messaging
  3. ^ а б Remy, Sharp, Messages, Workers, and Sockets, Introducing HTML5, New Riders, (2011). стр. 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. Архивирано из оригинала 12. 11. 2011. г. Приступљено 29. 05. 2016. 

Спољашње везе

[уреди | уреди извор]