postMessage pozwala na…

postMessage pozwala na wymienianie danych pomiędzy różnymi domenami przy użyciu #javascript
Dzisiaj w #od0dopentestera o tym, jak sprawdzić źródło wiadomości oraz dlaczego nie używać wyrażeń regularnych do tego celu.

window.addEventListener("message", function(message) {
alert(message.data);
}

Jeżeli na stronie umieścimy taki kawałek kodu, dowolna inna witryna będzie mogła przesłać do naszej domeny wiadomość i wyświetlić ją użytkownikowi:

document.getElementById("f").contentWindow.postMessage("Wiadomość", "*");

Jest to możliwe ponieważ nie sprawdzamy skąd pochodzi taka wiadomość.
Powinniśmy pozwalać na wykonanie akcji tylko zaufanym stroną.
W tym celu przeglądarka do każdej wiadomości dodaje pole origin, w którym zawarta jest nazwa domeny próbującej przesłać wiadomość:

if (message.origin == "http://naszadomena.local")

Ale ciągi znaków można sprawdzać na różne sposoby, na przykład przy użyciu wyrażeń regularnych:

if (/^http//www.domena.local$/.test(message.origin))

Łatwo wtedy zapomnieć, że kropka – oznacza dowolny jeden znak.
Aby sprawdzać czy jest tam rzeczywiście kropka – musielibyśmy poprzedzić ją .
W tym przypadku dane można również wysłać z wwwXdomena.local czy też wwwYdomena.local.

if (message.origin.indexOf("www.domena2.local") > 0)

Funkcja indexOf zwraca offset pod którym odnalazła poszukiwany ciąg.
Sprawdza zatem czy podany tekst znajduje się gdziekolwiek.
Aby obejść ten filtr możemy stworzyć subdomenę: www.domena2.local.innadomena.local

Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.

Ps. Zapraszam do obserwowania tagu autorskiego #od0dopentestera

#security #bezpieczenstwo #programowanie #programista15k #informatyka #it #nauka #technologia #ciekawostki #gruparatowaniapoziomu

Comments are closed.