- PVSM.RU - https://www.pvsm.ru -

Зачем Google добавляет while(1); к своим JSON-ответам?

Это позволяет избежать CSRF/XSRF-атак (подделки межсайтовых запросов [1]).

Рассмотрим следующий пример: допустим у Google есть URL вида http://gmail.com/json?action=inbox, который возвращает 50 первых сообщений вашего почтового ящика в формате JSON. Злоумышленник, чей сайт находятся на другом домене, не может выполнить AJAX запрос, обратившись по данному URL, чтобы получить данные, ввиду same origin policy (правило ограничения домена [2]). Но ничто не мешает злоумышленнику включить вышеуказанный URL на свою страницу с помощью тега <script>.

Данному URL будут переданы куки, сохранённые в вашем браузере для домена gmail.com. Путём переопределения глобального конструктора array или методов доступа [3] злоумышленник может вызывать произвольный метод всякий раз, когда устанавливается атрибут объекта (массива или хэша), тем самым получая доступ к содержимому JSON.

Конструкция while(1); или &&&BLAH&&& позволяет этого избежать. Gmail.com при отправке AJAX-запросов имеет полный доступ к содержимому ответа и благополучно эту дополнительную конструкцию вырезает. Тег же <script> выполняет JavaScript без какой-либо предварительной обработки, в результате чего, происходит либо бесконечный цикл (для while(1);) или синтаксическая ошибка (для &&&BLAH&&&).

[ Источник [4] ]

Автор: saynt2day

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/26488

Ссылки в тексте:

[1] подделки межсайтовых запросов: http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2

[2] правило ограничения домена: http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE_%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0

[3] переопределения глобального конструктора array или методов доступа: http://ejohn.org/blog/re-securing-json/

[4] Источник: http://stackoverflow.com/questions/2669690/why-does-google-prepend-while1-to-their-json-responses

[5] Источник: http://habrahabr.ru/post/168461/