Возможный дубликат:
Почему Google добавляет while (1); к их ответам JSON?
Google возвращает json следующим образом:
throw 1; <dont be evil> { foo: bar}
и Facebooks ajax имеет json вот так:
for(;;); {"error":0,"errorSummary": ""}
- Почему они помещают код, который останавливается выполнение и делает недействительным json?
- Как они анализируют его, если он недействителен и сбой, если вы попытаетесь оценить это?
- Они просто удаляют его из строка (кажется, дорогая)?
- Есть ли преимущества безопасности для это?
В ответ на это для целей безопасности:
Если скребок находится в другом домене, им нужно будет использовать тег script
для получения данных, потому что XHR не будет работать в кросс-домене. Даже без for(;;);
, как бы злоумышленник получил данные? Он не присваивается переменной, поэтому не собирался ли он собирать мусор, потому что нет ссылок на него?
В основном, чтобы получить перекрестный домен данных, они должны были бы сделать
<script src="http://target.com/json.js"></script>
Но даже без аварийного отказа script злоумышленник не может использовать данные Json без привязки к переменной, доступ к которой вы можете получить глобально (это не в этих случаях). Код сбоя effectivly ничего не делает, потому что даже без него они должны использовать серверные скрипты для использования данных на своем сайте.