Czytanie tekstu z innej strony

0

Hej, próbuję zczytać tekst ze swojego serwera, na którym wyświetlany jest JSON.

Takie coś działa:

 <script>
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET", "http://rest-service.guides.spring.io/greeting", false);
    xmlhttp.send();
	document.write(xmlhttp.responseText);
</script>

Ja jednak chciałbym odczytać stronę, którą generuję z mojego serwera - Tomcata.
Adres do pliku: http://localhost:8080/add/
Jest on zapełniony jednak w kodzie nic się nie dzieje.
Czytałem coś że ten adres może być do poprawy ale nie wiem na jaki.

W każdym razie czy mógłbym prosić jak mogę to zmodyfikować ten adres do mojego serwera?
Jeśli ten sposób jest niepoprawny to czy moglibyście podrzucić inne sposoby na wczytanie zawartości innej strony?

Pozdrawiam

2

Nie da się odczytać wyniku zapytania crossdomain bez użycia nagłówków http CORS albo JSONP (nie mylić z JSON).

2

W ramach zabezpieczenia przed atakami typu CSRF i XSS teoretycznie nie ma możliwości wykonywania zapytań z poziomu JS do innych domen. Wynika to z tzw Single Origin Policy. Obejście tego zwykle wymaga ustawienia nagłówka CORS po stronie serwera.

Czemu tak jest? Wyobraź sobie że umieszczam na swojej stronie javascript który wykonuje zapytania do jakiegoś lokalnego zasobu widocznego tylko dla kogoś wewnątrz twojej firmowej sieci (np. firmowy ECM, CRM czy ERP). JS wykonuje sie po stornie klienta wiec kiedy wejdziesz na moją stronę to z poziomu tego JSa można by pobrać jakieś dane z wewnętrznej sieci! Więc mamy anty-XSS.
Jednocześnie wyobraź sobie że na swojej stronie mam JS który wysyła request kasujący twoje konto na fejsbuku. Wchodzisz na moją stronę i pyk, konto na fejsbuku usunięte. Więc mamy anty-CSRF.

Napisałem wyżej że to wszystko jest teoretycznie bo da sie to mimo wszystko obejść np. za pomocą tzw dns rebinding, bo SOP sprawdza jedynie literalnie domenę, a nie serwer do którego domena sie resolvuje (częściowo też dlatego że mamy w internecie sporo reverse proxy i load balancerów, więc np. za facebook.com stoi wiele różnych serwerów). Więc teoretycznie mógłbyś, po tym jak user wejdzie na twoją stronę, zmienic wpis DNS dla swojej domeny, tak żeby wskazywał na jakiś lokalny (dla tego usera) zasób i wykonując request na mojadomena.com/cośtam odwołasz się realnie do tego lokalnego zasobu a SOP niczego nie zauważy...

0

Dzięki za odpowiedzi, wiele mi to wyjaśniło.
W takim razie możliwe, że źle się zabieram za pisanie aplikacji.

Chcę napisać aplikację: Serwer zwracający dane w formie JSONa (Spring etc.) oraz Klient (JS).

Chodzi mi o to, że gdy mój serwer aplikacji generuje dane w formie JSONa to ja chciałbym napisać oddzielnego klienta, który będzie w stanie wyświetlić te dane dlatego też pomyślałem o JavaScriptcie.

W takim razie co będzie najlepszą techniką do zczytania tego JSONa i wyświetlenia poszczególnych wartości?

Jeśli temat zszedł w inną technologię to prosiłbym o przeniesienie.

0

Można do iframe'a załadować stronę i sprawdzić zawartość, ewentualnie od razu podpiąć pod drzewo i się sprasuje.

0

W takim razie możesz spokojnie po stronie serwera dodać sobie CORS. W Spring MVC masz od tego po prostu adnotacje @CrossOrigin,

0

A czy mógłbyś wskazać jakies dependency? Przeszukuje internet i nie mogę trafić.

0

Znalazłem, miałem bardzo starą wersję springa w pomie. Dzięki za pomoc!

0
Shalom napisał(a):

W ramach zabezpieczenia przed atakami typu CSRF i XSS teoretycznie nie ma możliwości wykonywania zapytań z poziomu JS do innych domen.

Nie do końca prawda. Zapytanie możesz wykonać wysyłając dowolne dane. Nie możesz dostać się do odpowiedzi. Możesz w ten sposób zrobić DDOS, ale nic więcej.

Jednocześnie wyobraź sobie że na swojej stronie mam JS który wysyła request kasujący twoje konto na fejsbuku. Wchodzisz na moją stronę i pyk, konto na fejsbuku usunięte. Więc mamy anty-CSRF.

Da się, request wyjdzie, ale że skrypt wykonuje się w innej domenie to z requestem nie pójdą ciasteczka fb, więc i nie będzie aktywnej sesji, więc nie będzie autoryzacji niezbędnej do usunięcia konta.

0

@ŁF to nie kwestia ciasteczek tylko CORS i zwykle też tokenów CSRF. Jeśli ciasteczka nie są ustawione na http-only to oczywiście że można je wysłać z takim requestem. Niemniej serwer zobaczy że request jest cross origin i go oleje, albo zobaczy że nie pasuje mu token CSRF i też w związku z tym oleje.

0

Rozumiem, że to tak jakbym wysłał zapytanie do DB z poziomu API (restowego) i otrzymuję jakiegoś JSONa. Takim klientem może być webscraper, który odpytuje serwer w innej domenie - tak jak to robią porównywarki cenowe. Później sobie serializujesz tego JSONa i wyświetlasz, albo pchasz do innego serwisu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1