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

от автора

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

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

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

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

Источник

ссылка на оригинал статьи http://habrahabr.ru/post/168461/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *