«Защита от XSS», добавив)]} 'перед ответом ajax - PullRequest
10 голосов
/ 13 июля 2011

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

Ответы [ 2 ]

15 голосов
/ 13 июля 2011

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

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

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

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

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

В качестве простого примера, скажем, пользователь выяснил, как взять строку, как пример

["example"] 

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

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

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

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

7 голосов
/ 13 июля 2011

Как уже говорили, это защита от межсайтового скрипта Включение (XSSI)

Мы объяснили это Грюйер как:

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

...