2012-09-26 2 views
1

내 상호 도메인 JSONP 요청의 응답 본문에서 for(;;);을 무시하는 방법을 알아낼 수 없습니다. 나는 내 서버에서이 일을하고있다. 나는 같은 내 콜백의 응답 본체 내부에 그 for(;;);을 포함하는 것을 시도하고있다 :JSON/JSONP ((;;);을 (를) 사용하는 방법; 응답 본체에서

_callbacks_.callback(for(;;);[jsondata....]); 

하지만 JS 코드를 구문 분석되기 전에 어떻게 응답 본체에서 제거 할 수 있습니다? Google Closure Library를 사용 중입니다.

+0

구문 오류입니까? 아니요, JSONP 코드 repsonses를 편집 할 수 없습니다. 누가 그것을 포함 했습니까? 서버입니까? – Bergi

답변

1

좋아, 알아 냈어. 이유는 for (;;); 특정 정보에 대한 도메인 간 데이터 요청을 방지하는 것입니다. 따라서 기본적으로 보호하려는 정보가있는 경우 일반 Ajax JSON 채널을 통해 이동하고 여러 서버에 데이터를 저장하는 경우 서버 수준에서 처리하게됩니다.

JSONP 요청은 실제로 서버가 출력하는 내용이 실제 자바 스크립트 코드임을 나타내는 원격 스크립트 포함이므로 _callbacks_.callback(); 앞에 for(;;);이 있으면 요청 성공시 코드가 원본 도메인에서 실행됩니다. 무한 루프 일 경우 분명히 페이지를 잼 것입니다.

  1. 가 같은 서버에있는 파일을 일반 Ajax 요청을 보내기 :

    그래서 일반적인 구현 방법은 다음과 같다.

  2. 서버 수준의 작업을 수행하고 암호화 된 CURL을 통해 외부 서버에 요청을 보냅니다.
  3. <prevent eval statements> 문자열 다음에 서버 응답 (A for(;;); 또는 while(1); 또는 throw(1);에 보안을 추가합니다.
  4. 텍스트 문자열로 응답을 가져옵니다.
  5. 문자열에서 보안 구현을 제거합니다. 문자열 변환 (이 이제 표준 JSON 파서와 JS 개체/배열 등으로 "JSON 문자열")입니다.
  6. 데이터에 대해 수행 할 어떤 마십시오.

그냥 내가 여기를 넣어해야한다고 생각 Google이 제공하는 적절한 정보를 찾지 못해 다른 사람이 나중에 Google에 맡길 경우를 대비하여 이렇게하면 도메인 간 요청 위조를 방지 할 수 있습니다.