Любопытно: что это за синтаксис, который сервисы опроса Facebook используют во время обратного вызова - PullRequest
0 голосов
/ 27 сентября 2011

Я смотрел Network Monitor на инструменте разработчика Chrome и видел, как Facebook обновляет контент в своей ленте новостей.

Все ответы от AJAX начинаются со следующего:

for (;;);{"__ar":1,"payload":[]}

Чточто делает for(;;); часть?

Является ли это частью их пользовательской платформы JS?Или это нативный и просто что-то, с чем я не знаком?

Кажется, что он загружается как объект json, когда я его предварительно просматриваю.

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Это не совсем защита контента как таковая;как было отмечено, обходить его тривиально.Вероятная цель - «сломать» приложения, которые просто берут строку и передают ее в функцию javascript eval().Такой подход когда-то был довольно распространенным, и его все еще можно найти чаще, чем вы думаете.Я подозреваю, что есть довольно много программистов, которые думают, что это действительно правильный способ разбить строку JSON на переменные javascript.Добавление цикла for в начало строки приводит к слабому применению правила синтаксического анализа вместо eval.Конечно, все еще тривиально обойти это, если программист полностью настроен на использование eval.Я бы сказал, что это скорее детектор неработающего кода, который принудительно исправит старое (и ленивое) кодирование.

1 голос
/ 27 сентября 2011

Похоже, это неудачная попытка защиты контента (DRM). Цикл for() в основном бесконечный. Предполагается, что любой, кто наивно обрабатывает свой AJAX-запрос с помощью javascript, получит код, зависший из-за бесконечного цикла.

Цикл for() также будет генерировать ошибки для стандартных анализаторов JSON, таких как найденные в jQuery или YUI или даже из JSON.org. Чтобы использовать запрос, вам нужно написать свой собственный анализатор или сначала удалить цикл for() из запроса.

Вот почему я сказал, что это выглядит отстойно. Потому что нетрудно удалить цикл for() из строки с небольшим количеством кода.

...