Duplicar posible:
Why does Google prepend while(1); to their JSON responses?¿Por qué las personas ponen código como "arrojar 1; <no ser malo>" y "para (;;);" frente a las respuestas json?
Google devuelve JSON como esto:
throw 1; <dont be evil> { foo: bar}
y Facebooks ajax tiene JSON como esto:
for(;;); {"error":0,"errorSummary": ""}
- ¿Por qué ponen código que podría detener la ejecución de y hace que json no válido?
- ¿Cómo lo analizan si no es válido y se bloquea si intenta evaluar ?
- ¿Lo eliminan de la cadena (parece caro)?
- ¿Existen ventajas de seguridad en esto?
En respuesta a que es por motivos de seguridad:
Si el raspador está en otro dominio tendrían que usar una etiqueta script
para obtener los datos, ya que no va a funcionar XHR entre dominios. Incluso sin el for(;;);
, ¿cómo obtendría el atacante los datos? No está asignado a una variable, ¿no sería basura porque no hay referencias?
Básicamente para obtener el datos de varios dominios que tendrían que hacer
<script src="http://target.com/json.js"></script>
Pero incluso sin el guión accidente antepone el atacante no puede utilizar cualquiera de los datos JSON sin que se asigna a una variable que se puede acceder globalmente (no es en estos casos). El código de bloqueo no hace nada porque, incluso sin él, tienen que usar scripts de servidor para usar los datos en su sitio.
¿Puede proporcionar un enlace al sitio/json que tenga esto? – tcooc
Ver: http://stackoverflow.com/questions/3058401/empty-for-loop-in-facebook-ajax http://stackoverflow.com/questions/2669690/why-does-google-append-while1-in- front-of-their-json-responses – CMS
^He actualizado la pregunta porque esos no responden a la parte que me interesa. –