Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров68K
Автор оригинала: Rjh
Это позволяет избежать CSRF/XSRF-атак (подделки межсайтовых запросов).

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

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

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

[ Источник ]

UPD:
Информация от пользователя d00kie:

Это атака — JSON Hijacking, была блокирована в 2007/2008 производителями браузеров. Так что, в данном случае это «страховка» на случай, если изобретут новый способ перехвата и осталось «с тех времен», ибо хуже не будет. То, что в статье на столько старо, что с тех пор, как переопределяли Array() уже был «изобретён» новый способ (после фикса 2007 надо было найти новый способ и его нашли):

Object.prototype.__defineSetter__('Id', function(obj){alert(obj);});


И он тоже уже пофиксен в фаерфоксе версии >3.0.11…
Всё это история.
Теги:
Хабы:
+163
Комментарии145

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн