Porque é que o Google prepende while(1);
às suas respostas (privadas) ao JSON?
Por exemplo, aqui's uma resposta ao ligar e desligar um calendário em Google Calendar:
while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
['remindOnRespondedEventsOnly','true'],
['hideInvitations_remindOnRespondedEventsOnly','false_true'],
['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]
Eu assumiria que isto é para evitar que as pessoas façam uma "avaliação", mas tudo que você'teria que fazer é substituir o "entretanto" e então você'seria definido. Eu assumiria que a prevenção do eval é para garantir que as pessoas escrevam um código JSON de análise seguro.
I'vi isto usado em alguns outros lugares também, mas muito mais com o Google (Mail, Calendário, Contactos, etc.) Estranhamente, Google Docs começa com &&&&&&&&&&
em vez disso, e Google Contacts parece começar com while(1); &&&&&&&&&&&
.
O que'está a acontecer aqui?
Isto é para garantir que algum outro site não possa fazer truques desagradáveis para tentar roubar os seus dados. Por exemplo, substituindo o construtor de array, então incluindo este URL do JSON através de uma tag <script>
, um site malicioso de terceiros poderia roubar os dados da resposta do JSON. Colocando um while(1);
no início, o script será pendurado no lugar.
Um pedido no mesmo local utilizando XHR e um analisador separado do JSON, por outro lado, pode facilmente ignorar o prefixo while(1);
.
Isso seria para dificultar a inserção da resposta do JSON em um documento HTML com a tag <script>
. Lembre-se que a tag <script>
está isenta da mesma política de origem.
Nota: a partir de 2019, muitas das antigas vulnerabilidades que levam às medidas preventivas discutidas nesta pergunta já não são um problema nos browsers modernos. Vou deixar a resposta abaixo como uma curiosidade histórica, mas realmente todo o tópico mudou radicalmente desde 2010 (!!!) quando isto foi perguntado.
Ele impede que seja utilizado como alvo de uma simples etiqueta <script>
. (Bem, não o impede, mas torna-o desagradável). Dessa forma os maus não podem simplesmente colocar essa tag de script no seu próprio site e contar com uma sessão activa para que seja possível ir buscar o seu conteúdo.
edit — anote o comentário (e outras respostas). A questão tem a ver com instalações internas subvertidas, especificamente os construtores Objecto' e
Array'. Estes podem ser alterados de tal forma que de outra forma o JSON inócuo, quando analisado, poderia disparar um código atacante.