"Защита от Anti-XSS" путем добавления)]} перед ответом ajax

Google plus возвращает ajax-запросы с )]}' в первой строке. Я слышал, что это защита от XSS. Есть ли какие-либо примеры, что и как можно было сделать с этим без этой защиты?

Ответ 1

Вот мое лучшее предположение о том, что происходит здесь.

Во-первых, есть другие аспекты формата google json, которые не совсем корректны json. Таким образом, в дополнение к любым целям защиты, они могут использовать эту конкретную строку, чтобы сигнализировать, что остальная часть файла находится в формате google-json и должна быть соответствующим образом интерпретирована.

Использование этого соглашения также означает, что корм данных не выполняется из вызова из тега script или путем интерпретации javascript непосредственно из eval(). Это гарантирует, что разработчики front-end передают контент через синтаксический анализатор, который будет препятствовать выполнению любого имплантированного кода.

Итак, чтобы ответить на ваш вопрос, есть две правдоподобные атаки, которые это предотвращает, один кросс-сайт через тег script, но тем интереснее он находится внутри сайта. Обе атаки предполагают, что:

  • существует ошибка в том, как сбрасываются пользовательские данные и
  • он эксплуатируется таким образом, что позволяет злоумышленнику вводить код в один из каналов данных.

Как простой пример, скажем, пользователь понял, как взять строку, например, пример

["example"] 

и изменил его на "]; alert ('example');

[""];alert('example');"]

Теперь, если эти данные появляются в другом фиде пользователя, злоумышленник может выполнить произвольный код в пользовательском браузере. Так как он внутри сайта, файлы cookie отправляются на сервер, и злоумышленник может автоматизировать такие вещи, как обмен сообщениями или обмен людьми с учетной записью пользователя.

В сценарии Google эти атаки не будут работать по ряду причин. Первые 5 символов вызовут ошибку javascript перед запуском кода атаки. Кроме того, поскольку разработчики вынуждены анализировать код вместо случайного запуска его через eval, эта практика предотвратит выполнение кода в любом случае.

Ответ 2

Как говорили другие, это защита от Cross Site Script Inclusion (XSSI)

Мы объяснили это на Gruyere как:

В-третьих, вы должны убедиться, что Script не является исполняемым. стандартным способом сделать это является добавление некоторого неисполняемого префикса к это, как])} while (1);. A Script, работающий в одном домене, может прочитайте содержимое ответа и разделите префикс, но скрипты, запущенные в других доменах, не могут.