2011-07-04 11 views
7

Zauważyłem, że niektóre zapytania json, szczególnie w usługach google, zwracają specyficzny "json", który rozpoczyna się sekwencją zamykającą, a następnie ma tylko strukturę tablicową, określoną za pomocą nawiasy kwadratowe.Jakiego rodzaju odpowiedź json zaczyna się od)]} '

Jaki to jest ajax? Czy jest jakaś biblioteka, js lub py, parsująca to?

Mówiąc bardziej konkretny przykład:

>>> import json 
>>> import urllib2 
>>> url=urllib2.urlopen("https://plus.google.com/u/0/_/socialgraph/lookup/visible/?o=%5Bnull%2Cnull%2C%22114423404493486623226%22%5D") 
>>> url.readline() 
")]}'\n" 
>>> url.readline() 
'\n' 
>>> url.readline() 
'[["tsg.lac",[]\n' 

a stamtąd typowy tablicy poniżej. Pełna odpowiedź to zatem dwuwierszowy "nagłówek", a następnie tablica, ale "nagłówek" jest bardzo zagadkowy i zastanawiam się, czy pochodzi on ze standardowej biblioteki ajaxowej, czy jest to po prostu pomysł tych facetów.

Ach, jeśli używasz narzędzi programistycznych Chrome do sprawdzania rzeczywistych zapytań, widzisz to samo. Jestem więc skłonny uwierzyć, że jest to prawdziwa odpowiedź, a nie artefakt zapytania.

+0

Czy możesz wkleić w przykładzie?)]} z pewnością nie są poprawnymi znakami, aby rozpocząć strukturę JSON. – marchaos

+0

Czy możesz umieścić tutaj próbkę? Po pierwsze, myślę, że poprawny ciąg json nie powinien zaczynać się od czegoś podobnego)]} ', http://www.json.org/. Po drugie, możliwe jest, że sama aplikacja może usunąć ciąg znaków do poprawnego łańcucha json lub zdefiniować własną składnię. –

+0

ok, edytuję, aby umieścić próbkę. – arivero

Odpowiedz

4

Używanie nieprawidłowego JSON na początku wiadomości jest jednym ze sposobów na pokonanie kombinacji CSRF i a tricky attack on JavaScript's array constructor.

Jeśli ten URL zwrócił poprawną, niezapisaną tablicę, to każda odwiedzana witryna może przeciążyć funkcję Array, umieścić/wstawić odnośnik do tego adresu URL Google+ na stronie i zebrać prywatne/bezpieczne dane po prostu załadowane ich strona.

Kod Google po stronie klienta może usunąć ten nieprawidłowy JSON przed analizą, ponieważ używa tradycyjnego żądania XHR, które daje mu dostęp do nieprzetworzonej odpowiedzi. Zdalna witryna może uzyskać do niej dostęp tylko poprzez wstrzyknięcie elementu skryptu i nie ma możliwości wstępnego przetworzenia danych, zanim przeglądarka go przeanalizuje. Ta ostatnia jest podobna do działania JSONP, a konstruktor Array nieświadomie staje się funkcją wywołania zwrotnego.

Podobne podejście można zaobserwować w wielu witrynach o wysokim profilu, które zwracają tablice JSON w odpowiedzi na żądania GET. Facebook kładzie je na przykład pod numerem for (;;);. Jeśli spróbujesz użyć ataku CSRF na te interfejsy API Facebooka, przeglądarka po prostu wprowadza nieskończoną pętlę na stronie zdalnej, odwołując się do prywatnego interfejsu API Facebooka. W serwisie Facebook.com ich kod po stronie klienta ma możliwość wyłączenia go przed uruchomieniem JSON.parse() na nim.

Powiązane problemy