javascript 왜 구글은(1) 동안 prepend합니까; JSON 응답에




ajax security (5)

왜 구글 while(1); prepend합니까 while(1); (비공개) JSON 응답에?

예를 들어, Google 캘린더 에서 캘린더를 켜거나 끄는 동안의 반응은 다음과 같습니다.

while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
  ['remindOnRespondedEventsOnly','true'],
  ['hideInvitations_remindOnRespondedEventsOnly','false_true'],
  ['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]

나는 이것이 사람들이 eval() 을 수행하는 것을 막을 것이라고 가정 할 것이지만, 정말로해야 할 일은 while 교체 한 다음에 설정하는 것이다. 평가판은 사람들이 안전한 JSON 구문 분석 코드를 작성하도록하는 것이라고 가정합니다.

이상한 점도 있지만, Google 문서 도구&&&START&&& 로 시작하고 Google 연락처는 시작되는 것처럼 보입니다. (메일, 캘린더, 주소록 등) while(1); &&&START&&& while(1); &&&START&&& .

무슨 일 이니?


2011 년부터 모든 주요 브라우저에서 EMCA5를 사용하여 정식으로 해결 된 JSON 하이재킹 을 막을 수 있습니다.

복잡한 예 : Google에 mail.google.com/json?action=inbox 와 같은 URL이 있습니다.이 URL은받은 편지함의 처음 50 개 메시지를 JSON 형식으로 반환합니다. 다른 도메인의 악의적 인 웹 사이트는 AJAX가 같은 출처 정책으로 인해이 데이터를 가져올 수 없지만 <script> 태그를 통해 URL을 포함 할 수 있습니다. 쿠키로 URL을 방문 하고 전역 배열 생성자 또는 접근 자 메서드재정 의하여 개체 (배열 또는 해시) 특성이 설정 될 때마다 호출되는 메서드를 통해 JSON 내용을 읽을 수 있습니다.

while(1); 또는 &&&BLAH&&& 는 이것을 방지합니다. mail.google.com 의 AJAX 요청은 텍스트 콘텐츠에 대한 완전한 액세스 권한을 가지며이를 제거 할 수 있습니다. 그러나 <script> 태그 삽입은 맹목적으로 처리없이 JavaScript를 실행하므로 무한 루프 또는 구문 오류가 발생합니다.

이것은 사이트 간 요청 위조 문제를 해결하지 못합니다.


제 3자가 <script> 태그를 사용하여 JSON 응답을 HTML 문서에 삽입하는 것을 어렵게 만드는 것입니다. <script> 태그는 동일한 출처 정책 에서 면제됨을 기억하십시오.


간단한 <script> 태그의 대상으로 사용되지 못하게합니다. (나쁜 것은 아닙니다.) 그런 식으로 악의적 인 사람들은 스크립트 태그를 자신의 사이트에 넣고 활성 세션에 의존하여 콘텐츠를 가져올 수 없습니다.

편집 - 주석 (및 기타 답변)을 기록하십시오. 이 문제는 전복 된 내장 시설, 특히 ObjectArray 생성자와 관련이 있습니다. JSON을 무의미하게 처리하면 구문 분석시 공격자 코드가 트리거 될 수 있습니다.


<script> 태그는 웹 세계의 보안 필요성 인 동일 출처 정책에서 면제 되었기 때문에 while(1) JSON 응답에 추가되면 <script> 태그에서 오용을 방지합니다.


이는 다른 사이트에서 데이터를 도용하려는 불쾌한 속임수를 사용할 수 없도록하는 것입니다. 예를 들어 배열 생성자대체 한 다음이 JSON URL을 <script> 태그를 통해 포함하면 악의적 인 제 3 자 사이트가 JSON 응답의 데이터를 훔칠 수 있습니다. while(1); 처음에는 스크립트가 대신 중단됩니다.

반면에 XHR과 별도의 JSON 구문 분석기를 사용하는 동일한 사이트 요청은 while(1); 쉽게 무시할 수 있습니다 while(1); 접두사.





security