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

Почему «межсайтовый». Скрипт физически лежит на вашем сайте, но работает на злоумышленника: отправляет украденное на его сервер. Для браузера посетителя всё выглядит легитимно - код пришёл с доверенного домена. Именно этим XSS и опасна: атака идёт от вашего имени.

Как обычный комментарий превращается в атаку

Сценарий из практики. На сайте есть форма отзывов, текст которых выводится на странице товара как есть. Злоумышленник оставляет «отзыв», внутри которого вместо текста - тег со скриптом. Теперь у каждого открывшего страницу этот скрипт выполняется в браузере: тихо, без визуальных следов. Когда страницу открывает администратор из админки модерации - скрипт крадёт его сессионную куку, и злоумышленник входит в админку без логина и пароля. Дальше - шеллы, редиректы и все прелести взлома, которые мы разбирали в статье как понять, что сайт взломан.

Какие бывают XSS-уязвимости

ТипКак работаетКто под ударом
Хранимая XSSСкрипт сохраняется в базе (отзыв, комментарий, поле профиля) и исполняется у всех, кто открыл страницуВсе посетители и админы; самый опасный тип
Отражённая XSSСкрипт передаётся в ссылке (например, в параметре поиска) и исполняется при переходе по нейТот, кто кликнул подготовленную ссылку из письма или мессенджера
DOM-XSSУязвим javascript самой страницы: скрипт исполняется без участия сервераПосетители; не видна в серверных логах, ловится только аудитом фронтенда

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

Чем XSS-уязвимость грозит владельцу сайта

  • Угон админских сессий - вход в админку без пароля, дальше полный контроль над сайтом
  • Кража данных покупателей - скрипт-кейлоггер снимает всё, что вводится в формы: телефоны, адреса, карты
  • Подмена контента - реквизиты, ссылки и кнопки меняются на лету только у посетителей, владелец ничего не видит
  • Распространение вредоносного кода - с вашего сайта атакуют посетителей; антивирусы и поисковики заносят домен в чёрные списки
  • Фишинг от вашего имени - поддельные формы входа и оплаты на настоящем домене, против которых бессильна проверка адресной строки

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

Важно. XSS не оставляет следов в файлах: сайт «чистый», сканер антивируса молчит, а атака работает. Хранимая XSS живёт в базе данных, DOM-XSS - в логике фронтенда. Поэтому проверка сайта на вирусы и аудит на XSS - разные процедуры, и заказывать их нужно отдельно.

Найдём и закроем XSS-дыры на сайте

Проверим формы, отзывы, поиск и самописные компоненты, добавим экранирование и заголовки безопасности. Отчёт: что было уязвимо и что исправлено.

Заказать проверку

Как защитить сайт от XSS: практический минимум

  1. Экранируйте выводВсё, что ввёл пользователь, при выводе на страницу должно превращаться в безопасный текст. В Битрикс для этого есть штатные методы очистки и HTML-фильтр - в самописном коде их часто «забывают».
  2. Фильтруйте вводБелый список тегов для полей, где нужно форматирование, и полный запрет HTML там, где достаточно текста. Модерация отзывов до публикации - тоже фильтр.
  3. Включите проактивный фильтрWAF Битрикс перехватывает типовые XSS-пробы на входе - страховка от массовых сканирований ботами.
  4. Добавьте заголовки безопасностиContent-Security-Policy ограничивает, откуда странице можно загружать и исполнять скрипты: даже внедрённый код упрётся в запрет. Плюс флаги HttpOnly для кук - украсть сессию скриптом станет на порядок сложнее.
  5. Проверяйте после каждой доработкиКаждая новая форма и вывод пользовательских данных - потенциальная точка входа. Правило «вывел данные - экранируй» должно быть в чек-листе приёмки любой доработки.
Совет. Быстрый самотест для владельца: оставьте на сайте тестовый отзыв с угловыми скобками и посмотрите исходный код страницы, где он вывелся. Если скобки пришли в браузер как есть, а не в виде экранированных сущностей - у вас проблема, зовите разработчика.

Частые вопросы об XSS

У нас нет комментариев на сайте. Значит, XSS не грозит?
Грозит: XSS живёт в любом месте, где выводится то, что пришло от пользователя, - поиск по сайту, формы заказа (имя выводится в личном кабинете и админке), фильтры каталога, параметры в URL. Отсутствие комментариев сужает поверхность атаки, но не убирает её.
Чем XSS отличается от SQL-инъекции?
SQL-инъекция бьёт по базе данных на сервере: крадут и портят данные. XSS бьёт по браузерам посетителей: крадут сессии и подменяют страницы. Общий корень один - доверие к пользовательскому вводу без проверки, поэтому и лечатся они в связке, на аудите кода.
Защищает ли Битрикс от XSS из коробки?
Штатные компоненты экранируют вывод, проактивный фильтр режет типовые пробы. Но кастомные шаблоны и самописные компоненты платформа за разработчика не проверит: одна доработка с выводом «как есть» - и дыра готова. Чем больше кастома, тем нужнее аудит.
Сколько стоит закрыть XSS-уязвимости на сайте?
Точечное исправление найденной дыры - от 50-150 BYN. Аудит форм и пользовательского вывода по всему сайту с исправлениями - ориентировочно от 300 BYN в зависимости от объёма кастомного кода. Экспресс-осмотр и смета - бесплатно, за один день.

XSS - атака незаметная: сайт выглядит здоровым, пока с него утекают сессии и данные клиентов. Надёжный способ спать спокойно - разовый аудит пользовательского ввода и вывода плюс дисциплина в новых доработках. Первое сделаем в рамках доработки сайтов, второе обеспечит абонентская поддержка: Alavir работает с Битрикс с 2013 года, за плечами 450+ проектов. Консультация бесплатная.