Dlaczego cross-domain JSONP jest bezpieczny, ale cross-domainJSON nie?

Mam problem z połączeniem kilku kropek, które niedawno dowiedziałem się o JSONP. Oto moje zrozumienie:

  • Cross-domain Xmlhttprequesty dla jakiejkolwiek Zawartości (w tym JSON) są zakazane, ze względu na tę samą politykę pochodzenia. Chroni to przed XSRF.
  • dozwolone jest posiadanie znacznika script z src, który zwraca JSONP - niektóre JSON wyściełane wewnątrz wywołania funkcji Javascript (powiedzmy 'Foo')
  • możesz mieć jakąś implementację 'foo' na stronie, która zostanie wywołana, gdy dane JSONP są zwracane i możesz robić rzeczy z danymi JSON, które funkcja jest przekazywana

Dlaczego jest w porządku odbierać dane między domenami, jeśli przyszedł przez JSONP, ale nie, jeśli przyszedł przez JSON?

Czy jest założenie, że JSON ma skłonność do zezwalania na XSRF, ale JSONP nie jest? Jeśli tak, to czy jest jakiś powód, dla którego JSONP jest jakimś de facto formatem danych, który nigdy nie dostarczy danych umożliwiających XSRF? Dlaczego JSONP a nie jakiś arbitralny znacznik root na XML zamiast tego?

Z góry dziękuję za odpowiedzi, proszę, spraw, by mój mózg znowu pracował po tym, jak tego nie rozgryzłem.

Author: hippietrail, 2011-08-18

2 answers

Nie wiem skąd się wzięło przekonanie, że JSONP jest bezpieczny ale zobacz

JSON-P jest, z tego powodu, postrzegane przez wielu jako niebezpieczne i hacky podejście do cross-domeny Ajax, i nie bez powodu. Autorzy muszą być pilnie wykonywać tylko takie połączenia do zdalnych serwisów internetowych, które kontroli lub dorozumianego zaufania, tak aby nie narażać swoich użytkowników na krzywdę.

I

Najbardziej krytycznym elementem tej propozycji jest to, że dostawcy przeglądarek muszą begin to egzekwuj tę regułę dla znaczników skryptów, które otrzymują JSON-P treści, i rzucać błędy (lub przynajmniej przerywać przetwarzanie) na dowolne niezgodna zawartość JSON-P.

Oba cytaty z http://json-p.org /.

Inne linki z przydatnymi informacjami o JSONP / security:

Wszystkie te mówią 2 rzeczy-w zasadzie nie jest to uważane za "bezpieczne", ale istnieją pomysły, jak uczynić go"bezpieczniejszym"... chociaż większość pomysłów opiera się na standaryzacji i specyficznej logice sprawdzania wbudowanej w przeglądarki itp.

 7
Author: Yahia,
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:09:42

Rozumiem, że to pytanie dotyczy tego, dlaczego przeglądarka uważa JSONP za Bezpieczny, a nie tego, czy jest bezpieczny (a nie jest). Poruszę to pytanie krok po kroku.

Regular ol ' AJAX

Aby wykonać zwykłe żądanie AJAX, przeglądarka tworzy obiekt XHR, wskazuje go na adres URL i pobiera dane. Obiekt XHR będzie ufał tylko danym z tej samej domeny. Jest to trudne ograniczenie. Nie ma możliwości obejścia go w obecnych przeglądarkach (edycja - można teraz używać Kors).

Solution-Don ' t use XHR

Ponieważ XHR podlega tej samej domenie, nie możemy używać XHR do cross domain AJAX . Na szczęście istnieją inne sposoby, aby trafić na zdalny serwer. Możemy na przykład dodać tag obrazu do strony. Możemy również dodać znacznik skryptu i nadać mu atrybut src, który wskazuje na zdalny serwer. Możemy na przykład wyciągnąć JQuery z CDN i oczekiwać, że zadziała.

Jak działa JSONP.

Kiedy składamy wniosek o JSONP, nasz kod dynamicznie dołącza znacznik skryptu do strony . Znacznik script ma atrybut source, który wskazuje na zdalny adres URL API JSONP, tak jak gdybyś wstawiał skrypt z CDN.

Skrypt JSONP zwracany przez serwer jest zawinięty w wywołanie funkcji . Po pobraniu skryptu funkcja zostanie wykonana automatycznie.

Dlatego musimy podać JSONP nazwę funkcji zwrotnej, w którą chcemy zawinąć skrypt. Funkcja ta będzie być wywołane Po pobraniu skryptu.

Problemy bezpieczeństwa

Są tu dość duże problemy z bezpieczeństwem. Skrypt, który pobierasz, może przejąć kontrolę nad twoją stroną i narazić użytkowników na ryzyko. JSONP nie jest bezpieczny dla użytkowników, po prostu nie jest blokowany przez przeglądarki internetowe. JSONP naprawdę jest exploitem przeglądarki, z którego korzystamy . Stosować ostrożnie.

Używane mądrze, JSONP jest całkiem niesamowite choć.

 9
Author: superluminary,
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
2015-08-23 21:28:02