Google plus возвращает запросы ajax с )]}'
в первой строке. Я слышал, что это защита от XSS. Есть ли примеры, что и как можно было сделать с этим без этой защиты?
Защита от XSS путем добавления )]}' перед ответом ajax
Ответы (2)
Вот мое лучшее предположение о том, что здесь происходит.
Во-первых, есть и другие аспекты формата google json, которые не совсем соответствуют json. Таким образом, в дополнение к любым целям защиты, они могут использовать эту конкретную строку, чтобы сигнализировать о том, что остальная часть файла находится в формате google-json и должна интерпретироваться соответствующим образом.
Использование этого соглашения также означает, что поток данных не будет выполняться ни вызовом из тега скрипта, ни интерпретацией javascript непосредственно из eval(). Это гарантирует, что разработчики переднего плана пропустят контент через анализатор, который предотвратит выполнение любого внедренного кода.
Итак, чтобы ответить на ваш вопрос, есть две вероятные атаки, которые это предотвращает: одна межсайтовая через тег скрипта, но более интересная — внутрисайтовая. Обе атаки предполагают, что:
- существует ошибка в том, как пользовательские данные экранируются и
- он используется таким образом, что позволяет злоумышленнику внедрить код в один из каналов данных.
В качестве простого примера предположим, что пользователь понял, как взять строку типа example
["example"]
и изменил его на "];alert('example');
[""];alert('example');"]
Теперь, если эти данные появляются в ленте другого пользователя, злоумышленник может выполнить произвольный код в браузере пользователя. Поскольку это находится внутри сайта, файлы cookie отправляются на сервер, и злоумышленник может автоматизировать такие вещи, как обмен сообщениями или обмен сообщениями с людьми из учетной записи пользователя.
В сценарии Google эти атаки не сработают по ряду причин. Первые 5 символов вызовут ошибку javascript перед запуском кода атаки. Кроме того, поскольку разработчики вынуждены анализировать код вместо того, чтобы случайно запускать его через eval, эта практика в любом случае предотвратит выполнение кода.
Как говорили другие, это защита от межсайтового скрипта Inclusion (XSSI).
Мы объяснили это в Gruyere следующим образом:
В-третьих, вы должны убедиться, что скрипт не является исполняемым. Стандартный способ сделать это — добавить к нему неисполняемый префикс, например ])}while(1);. Сценарий, работающий в том же домене, может прочитать содержимое ответа и удалить префикс, но сценарии, работающие в других доменах, не могут.