Глоссарий

XSS-атаки: определение, цели, защита от XSS-атак

автор
Автор Максим Пушкарёв
clock
На чтение 8 минут
XSS-атаки - межсайтовый скритинг. Он считается одним из самых распространенных видов уязвимости среди приложений. Проведенные злоумышленниками XSS-атаки позволяют им обходить ограничения безопасности браузера и внедрять в веб-страницы, которые просматриваются другими пользователями, свой собственный сценарий. При открытии ресурса происходит взаимодействие имплантированного кода с удаленным сервером взломщика.
В данной статье мы расскажем:

Цели XSS-атак

С какой целью может быть предпринята попытка атаки через XSS? В большинстве случаев — чтобы изменить настройки, украсть куки-файлы, внедрить блоки с ложной рекламой, заставить сервисы работать некорректно.

Цели XSS-атак

Самая частая цель атакующего – это сookies, в которых могут оказаться ценные данные вроде пользовательских логинов, паролей, хэша. Кроме того, опасность представляют кражи открытых сессий на важных сайтах, поэтому даже если заходите на них с собственного компьютера из дома, всё равно по завершении работы обязательно нажимайте «выход». Впрочем, во избежание инцидентов сайты в большинстве своем предусматривают автоматическое закрытие сессии по истечении определенного времени. Но ограничения XMLHttpRequest на доменах от подобных атак защитить не могут.

Еще одна разновидность XSS-атак – воровство данных из заполняемых форм. Злоумышленники запускают на нужной им странице onsubmit (отслеживание событий) и получают к себе на сервер интересующую их информацию. Это что-то вроде фишинговых атак, только без создания фэйковых страниц. Всё воруется с нормального, хорошо себя зарекомендовавшего сайта.

В популярных соцсетях вроде «ВКонтакте», Twitter и прочих практикуются атаки с запуском XSS-червей. Это когда группа людей получает уязвимые ссылки, в которые заранее внедрены ложные скрипты, способные от имени другого человека делать рассылки. Параллельно личные данные и фото со страниц пользователей могут сливаться на сторонние ресурсы.

Типы XSS-уязвимостей

Различают три вида XSS-уязвимостей: с постоянным XSS (его еще называют хранимым), непостоянным (отраженным) XSS и с XSS в DOM-модели.
  • Постоянный XSS
Данный тип атак через XSS считается самым разрушительным. Заключается в том, что злоумышленник внедряет на сервер вредоносный код, срабатывающий каждый раз, как только идет обращение к странице. Это, например, практикуется на форумах, где нет ограничений на комментарии формата HTML.

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

  • Непостоянный XSS
Это самый часто встречающийся вид XSS. Суть его состоит в том, что пользовательские данные из поисковой строки или из HTML формы даже не обрабатываются, а сразу задействуются в формировании ответа на клиентский запрос.
  • XSS в DOM-модели
Здесь опасность создается на стороне клиента в момент, когда внутри JavaScript сценария происходит обработка данных. Атаки данного типа осуществляются через Document Object Model, то есть, DOM (отсюда и название). Это программный интерфейс, который вне зависимости от площадки и языка дает внедренным программам доступ к HTML и XML-документам, более того, сам способен менять их содержание, оформление, порядок размещения в них информации и т.п.

Типы XSS-уязвимостей

То есть, XSS создается прямо внутри JavaScript. В качестве примера такой XSS-атаки можно привести схему, по которой информация из URL добывается посредством location.* DOM либо с помощью XMLHttpRequest запроса. А затем на основе полученных (причем неотфильтрованных) данных формируются динамические HTML объекты.

Активная и пассивная XSS-уязвимости

Наибольшую опасность представляют активные уязвимости. После внедрения на сервер (в базу данных или в какие-то файлы) вредоносного SQL-кода зараженный сайт может представлять угрозу для любого посетителя. «Заразными» могут оказаться даже данные, пропущенные через вашу систему защиты, потому что уязвленные объекты имеют хорошую способность к интеграции.

Что касается пассивной XSS-атаки, то здесь злоумышленникам приходится что-то придумывать, чтобы посредством обманных ссылок перевести вас на фейковую страницу или заставить перейти на нужный сайт. Как вариант – отслеживают, какие сайты вы посещаете чаще всего, а затем присылают письма от имени администрации этих ресурсов с целью якобы проверки настроек. Мошенники активно действуют и через форумы посредством постов либо рассылок.

Различают пассивные XSS-уязвимости с POST и GET-параметрами. Первые внедряются с применением тех или иных хитростей, а вторые – посредством кодирования или изменения (через добавление новых символов) url-строки.

Методика проведения XSS-атак

Далее о том, как именно работает XSS-атака. И начинать тут следует с определения всех её участников. Обычно агентов трое: мошенник, жертва и сайт.

Сайт выдает HTML-страницы в ответ на пользовательский запрос. Жертва – это тот самый пользователь, введший запрос в строку браузера. Злоумышленник – другой пользователь, подготовивший на сайте XSS-уязвимость, с помощью которой собирается обмануть жертву. У мошенника есть еще собственный контролируемый им сервер, созданный специально для кражи чужих ценных данных.

Методика проведения XSS-атак

XSS-атака проводится следующим образом:

  • Задействовав одну из форм сайта, мошенник внедряет в его базу данных вредоносную строку.
  • Жертва делает поисковой запрос на страницу ресурса.
  • В ответ в базе данных берется эта вредоносная строка и выдается пользователю как результат его запроса.
  • Из получившегося ответа браузер жертвы формирует вредоносный скрипт, и на мошенницкий сервер идут куки-файлы обманутого пользователя.
Прежде чем осуществлять атаку ресурса, злоумышленник ещё проверяет, насколько тот уязвим. Вредоносный код JavaScript может быть запущен лишь через браузер посетителя-жертвы, а это означает, что сайт (на который зайдёт человек) должен быть с XSS-уязвимостью. Как это проверяется? Поиском вручную либо с помощью автоматизированных скриптов. Чаще всего это привычные всем формы для отправки и приема запросов, комментариев, получения обратной связи, поиска и т.п.

Злоумышленник собирает все страницы с формами ввода, и они сканируются на предмет обнаружения уязвимостей. К примеру, наличие XSS-уязвимости на странице «Поиск» проверяется введением запроса <script>alert("cookie: "+document.cookie)</script>.

Выведенное на экран уведомление говорит о том, найдена опасность. Если же всё в порядке, то система выдаст результаты поиска. С современными популярными CMS подобных проблем уже не возникает, однако сторонние разработчики то и дело придумывают новые модули, дающие больше функциональных возможностей для запуска XSS-атак. Особенно это касается Joomla, DLE, Bitrix, Wordpress. Браузер, наиболее часто используемый для проверки XSS-уязвимостей — Internet Explorer.

Как еще можно искать проблемные места в безопасности? Например, с помощью страниц, обрабатывающих GET-запросы. Пусть, например, у вас есть вот такая ссылка: https://site.ru/catalog?p=8. В строке поиска нужно заменить идентификатор (8) скриптом – "><script>alert("cookie: "+document.cookie)</script>. Тогда ссылка получится уже другой: https://site.ru/catalog?p=&quot;&gt;&lt;script&gt;alert(&quot;cookie: "+document.cookie)</script>.

При обнаружении на странице уязвимоcти XSS система выдаст такое же уведомление, как было описано в предыдущем примере.

Вообще существует масса самых разнообразных скриптов и запросов, способных обнаружить на сайте опасную «брешь». Ресурс можно считать надежно защищенным, если ни одна из подобных проверочных атак не проходит.

Методика проведения XSS-атак

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

Смягчение последствий и защита от XSS-атак

Как бороться с попытками атаки через XSS? Проверять и чистить входные данные на наличие кода, экранировать их (опять же, если в них точно нет вредоносного кода), менять структуру приложения так, чтобы возможность загрузки кода допускалась исключительно из обозначенных, надежных мест.

Санитизация кода

Это, собственно, и есть исключение из кода любых подозрительных элементов. Вы можете и сами написать такую функцю-клинер, но для продакшена лучше воспользоваться готовыми надежными вариантами вроде специальной библиотеки-санитайзера DOM Purify и ей подобных. Они обнаруживают опасные коды и устраняют их.

Экранирование контента

Браузер может воспринимать некие спецсимволы как безопасные, посчитав, что это теги. Такую символику необходимо заменить. Например, запись <script>alert('XSS!');</script> после экранирования будет выглядеть так &lt;script&gt;alert('XSS!');&lt/script&gt;. Данный вариант для браузера уже не выглядит как тег либо скрипт.

В JavaScript экранирование контента осуществляется с помощью:

  • encodeURI (применяется для кодировки URL);
  • encodeURIComponent (применяется для кодировки части URL-flhtcf, к примеру, searchQuery);
  • специальных библиотек (применяются для замены спецсимволов вроде <, >, '," и прочих).

Content Security Policy

Говоря простым языком, CSP – это «белый» список разрешенных к использованию инструментов. Именно данный подход, кстати, считается самым эффективным и надежным. Все типы источников в CSP распределены по отдельным спискам:

  • script-src — тут собраны места, из которых можно брать скрипты;
  • style-src — список допустимых стилей;
  • img-src — места, откуда можно подгружать изображения.

Как инструмент защиты Content Security Policy работает очень мощно, причем не особо ограничивая свободу деятельности, что обеспечивается наличием широкого спектра настроек.

Вот еще несколько рекомендаций к тому, как бороться у себя на сайте с XSS-атаками:

  • Непременно применяйте кодирование пользовательских вводов (если они подключены на вашем ресурсе).
  • В случаях, когда нет возможности кодировать или это кажется неуместным, применяйте замену или валидацию.
  • В целях безопасности данные кода должны проходить обработку и на стороне web-сервера, и на пользовательском, то есть, клиентском участке.
  • Если вы работаете с популярными системами управления вроде Wordpress, Bitrix, Joomla, то обязательно регулярно запускайте обновления и для движка, и для всех дополнительных подключенных плагинов и модулей. На самих системах обычно по умолчанию есть защита от XSS-атак, чего нельзя сказать о взятых из сомнительных источников плагинах (и тогда подбор ключа к ним – не проблема для злоумышленников).
Смягчение последствий и защита от XSS-атак

Опасность представляет еще и межсайтовый скрининг. Для сервера XSS-атаки не представляют опасности, они угрожают тем, кто заходит на зараженную страницу или сайт. Но если мошенники «захватят», например, администраторские cookies, то получат полную возможность управлять на своё усмотрение атакованным ресурсом.

Сохраните себе:
Читайте также
Чистая прибыль: понятие, формула расчета
В данной статье мы расскажем: Понятие чистой прибыли Цели расчета чистой прибыли…
Специфика направления HoReCa
В данной статье мы расскажем: Что такое HoReCa Специфика сферы HoReCa Маркетинг…
GRP: значение и расчет показателя
В данной статье мы расскажем: Что такое GRP Зачем измерять GRP Отличие…
Время на сайте: как узнать и повысить
В данной статье мы расскажем: Понятие времени на сайте Важность времени на…
Что такое Open Rate и как его рассчитать
В данной статье мы расскажем: Что такое Open Rate Формула Open Rate…
Что такое GMV и как его рассчитать
В данной статье мы расскажем: Что такое GMV Как рассчитывают GMV GMV…
CTOR: что означает, как рассчитать
В данной статье мы расскажем: Что обозначает показатель CTOR Формула расчета CTOR…
Стоимость привлечения клиента (CAC): разбираемся в деталях
В данной статье мы расскажем: Что такое стоимость привлечения клиента (CAC) Отличие…
Внутренняя норма доходности: что это, как рассчитывается
В данной статье мы расскажем: Внутренняя норма доходности: что это такое Применение…
LCR: что означает, как считать
В данной статье мы расскажем: Суть LCR в маркетинге Формулы расчета LCR…
CAGR: разбираемся в нюансах
В данной статье мы расскажем: Что такое CAGR Формула расчета CAGR Практическое…
RFM-анализ: задачи, преимущества, этапы
В данной статье мы расскажем: Понятие RFM-анализа Этапы RFM-анализа Дальнейшая работа с…