Poruszanie się po tej samej polityce pochodzenia w javascript bez skryptów po stronie serwera

Mam środowisko, które naprawdę nie pozwala na skrypty po stronie serwera (bardzo trudno jest uzyskać skrypt "zainstalowany" na serwerze). Próbowałem użyć ramki iframe, aby naruszyć poilcy javascript tego samego pochodzenia; jednak to nie zadziałało. Czy są jakieś inne obejścia, o których Nie wiem?

Dzięki!

Author: Parris, 2010-01-14

2 answers

Jak wspomniał David Dorward, JSON-P jest najprostszy i najszybszy; jednak jest jeszcze jedna sztuczka, szczególnie przy użyciu dwóch ramek iFrame.

Dwa obejść ten problem bez użycia JSONP, można zrobić następujące. Ta technika zakłada, że masz jakiś dostęp do strony nadrzędnej.

Istnieją trzy strony na dwóch domenach / stronach.

  1. Strona nadrzędna
  2. Content page
  3. Strona komunikacji między domenami (aka "xdcomm")

Strony strony nadrzędne i xdcomm są hostowane w tej samej domenie, strona zawartości jest hostowana w dowolnej innej domenie. Strona zawartości jest osadzona jako ramka iframe na stronie nadrzędnej, a strona xdcomm jako ukryta ramka iframe na stronie zawartości.

Tutaj wpisz opis obrazka

Strona xdcomm zawiera bardzo prosty skrypt, który wykrywa parametry GET w łańcuchu zapytania, przetwarza ten łańcuch dla zmiennych method i args (Gdzie args jest łańcuchem zakodowanym w JSON), a następnie wykonuje podaną metodę z podanymi argumentami na stronie nadrzędnej. Przykładem może być tutaj (Zobacz źródło).

Mimo że ta sama polityka pochodzenia JavaScript ogranicza kod jednej domeny przed dostępem do innej, nie ma znaczenia, czy domeny są zagnieżdżone wewnątrz siebie (domena A, zagnieżdżone w domenie B, zagnieżdżone w domenie a).

Tak więc, w skrócie, strona treści wysyła wiadomości do strony nadrzędnej za pośrednictwem strony xdcomm, zmieniając źródło iframe do czegoś takiego jak http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4]. Byłoby to równoznaczne z wykonaniem foo(1,2,3,4) na stronie nadrzędnej.

Wiedz również, że istnieją już biblioteki, które Ci w tym pomogą, takie jak easyxdm . To, co tutaj wyjaśniłem, jest podstawą jednej z technik, których używają, i chociaż może nie być tak fantazyjne, z pewnością jest to w pełni funkcjonalna i lekka implementacja.

 28
Author: Justin Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:19:36

Miejmy nadzieję, że nie, bo to byłaby dziura bezpieczeństwa! :)

Ale jeśli obie Twoje strony są subdomenami w tej samej domenie, może dokument.domena może pomóc.

 2
Author: Pekka 웃,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-14 19:43:52