После прочтения этого вопроса о том, почему google/facebook и т.д. добавляют unparseable cruft, например:
-
while(1);
-
for(;;);
-
&&&START&&& ... &&&END&&&
- 1 и 3 вместе
к их ответам JSON, я понял мотивацию. Но я до сих пор неясно, почему такие относительно сложные механизмы используются, когда подобные эффекты могут быть достигнуты с помощью таких вещей, как
- добавление дополнительного
)
в начале для рендеринга всей строки с ошибкой синтаксиса - упаковка JSON в комментариях
Теперь кажется, что эта добавленная защита бесконечного цикла и (странная) синтаксическая ошибка заключалась бы в том, чтобы обойти старые и разрешающие парсители javascript, но я не могу найти ссылок, указывающих, что это так. Существует еще один вопрос qaru.site/info/121285/..., который продолжается даже в случае обходного пути while(1);
(указывающего, что 1 может быть сбито) и отклонить другое обходное решение формы {}&&
, но не объясняет, почему или ссылаются на любые источники.
Другие ссылки:
- http://code.google.com/p/fbug/issues/detail?id=369
- http://prototypejs.org/learn/json, который предлагает обернуть JSON в
/*-secure-\n...*/