Глоссарий

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, то получат полную возможность управлять на своё усмотрение атакованным ресурсом.

Сохраните себе:
Читайте также
Необходимость, виды и примеры программы лояльности для клиентов
В данной статье мы расскажем: Что такое программа лояльности для клиентов Задачи…
Разработка маркетинговой стратегии: цели, этапы, условия
В данной статье мы расскажем: Цели маркетинговой стратегии Кому необходима маркетинговая стратегия…
CMS: принципы создания и управления сайтами
В данной статье мы расскажем: Что может CMS Основные компоненты CMS Типы…
Фандрайзинг: понятие, принципы, виды
В данной статье мы расскажем: Что такое фандрайзинг простыми словами Сферы использования…
Что такое RPA: разбираемся в тонкостях
В данной статье мы расскажем: Принцип RPA Функционал RPA Платформа RPA или…
Пользовательский контент: как и почему это работает
В данной статье мы расскажем: Что такое пользовательский контент простыми словами Преимущества…
Брендинг компании: определение, цель и задачи
В данной статье мы расскажем: Что такое брендинг компании Виды брендинга Цель…
Эффект Гиффена: суть, причины, примеры
В данной статье мы расскажем: Суть эффекта Гиффена Товары Гиффена Товары Веблена…
A/B-тестирование: суть, методы, инструменты
В данной статье мы расскажем: Суть A/B-тестирования Цели A/B-тестирования Когда нужно A/B-тестирование…
«Целевой звонок» от Яндекс: принцип работы и подключение
В данной статье мы расскажем: Что такое «Целевой звонок» Как подключить «Целевой…
Индекс качества сайта (ИКС)
В данной статье мы расскажем: Что такое индекс качества сайта (ИКС) От…
Холодные звонки: подходы, скрипты и этапы
В данной статье мы расскажем: Отличия холодных звонков от теплых Цели холодных…