2011-07-04 10 views
7

특히 Google 서비스에서 일부 json 쿼리는 닫는 시퀀스로 시작하는 고유 한 "json"을 반환하고 다음으로 지정되는 배열 구조를가집니다. 대괄호.어떤 종류의 json 응답이)로 시작하는지]} '

어떤 종류의 아약스입니까? 일부 라이브러리, js 또는 py가 파싱 되었습니까?

좀 더 구체적인 예를 넣으려면 :
>>> 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' 

거기에서

는, 전형적인 배열은 다음과 같습니다. 완전한 대답은 따라서 두 줄의 "머리글"과 배열이지만 "머리글"은 매우 수수께끼 같고 표준 아약스 라이브러리에서 왔는지 또는이 사람들의 아이디어인지 궁금합니다.

아, Chrome의 개발자 도구를 사용하여 실제 검색어를 살펴보면 동일한 검색어가 표시됩니다. 그래서 나는 그것이 실제 대답이고 쿼리의 인공물이 아니라고 믿게됩니다.

+0

예제를 붙여 넣을 수 있습니까?)]}는 JSON 구조를 시작하는 데 유효한 문자가 아닙니다. – marchaos

+0

여기에 샘플을 게시 할 수 있습니까? 첫째, 유효한 json 문자열은)} ', http://www.json.org/과 같이 시작하면 안된다. 둘째로, 앱 자체가 문자열을 유효한 json 문자열로 스트립하거나 자체 구문을 정의 할 수 있습니다. –

+0

좋아, 샘플을 넣어 편집합니다. – arivero

답변

4

메시지 시작 부분에 잘못된 JSON을 사용하는 것은 CSRF와 a tricky attack on JavaScript's array constructor의 조합을 무효화하는 한 가지 방법입니다.

URL이 유효한 래핑되지 않은 배열을 반환하면 방문한 모든 사이트에서 Array 함수를 오버로드하고 해당 페이지의 Google+ URL에 스크립트 참조를 삽입하고 단순히로드 할 때 비공개/보안 데이터를 수집 할 수 있습니다. 그들의 페이지.

Google의 자체 클라이언트 측 코드는 구문 분석하기 전에 잘못된 응답을 제공 할 수있는 전통적인 XHR 요청을 사용하기 때문에 잘못된 JSON을 제거 할 수 있습니다. 원격 사이트는 스크립트 요소 삽입을 통해서만 액세스 할 수 있으며 브라우저가 구문 분석하기 전에 데이터를 사전 처리 할 기회가 없습니다. 후자는 무의식적으로 콜백 함수가되는 Array 생성자를 사용하여 JSONP의 작동 방식과 유사합니다.

GET 요청에 대한 응답으로 JSON 배열을 반환하는 많은 유명한 사이트에서 유사한 접근 방식을 볼 수 있습니다. 페이스 북은 예를 들어 for (;;);으로 페이스를 채 웁니다. Facebook API에서 CSRF 공격을 사용하려고 시도하면 브라우저가 원격 사이트에 무한 루프로 들어가서 Facebook의 비공개 API를 참조합니다. Facebook.com에서 클라이언트 측 코드는 JSON.parse()를 실행하기 전에이를 제거 할 수있는 기회를 제공합니다.

관련 문제