БесплатноБесплатный прототип ключевой страницы и черновик ТЗ при старте проекта
Безопасность

Защита от SQL-инъекций, XSS и CSRF на сайте 1С-Битрикс

Устраняем классические веб-уязвимости в коде сайта на 1С-Битрикс: переводим запросы на параметризацию и API ядра вместо прямого SQL, экранируем вывод и включаем Content Security Policy против XSS, защищаем формы CSRF-токенами bitrix_sessid, добавляем валидацию ввода и безопасную загрузку файлов. Закрываем OWASP-классику там, где она живёт — в коде.

10 летна проектах безопасности Битрикс
OWASPзакрываем классику Top-10
180+исправленных уязвимостей
от 3 днейдо устранения находок
<?php SQLi XSS CSRF Bitrix
Зачем закрывать SQLi, XSS и CSRF

Где классические уязвимости пробивают сайт на Битрикс

SQL-инъекции, XSS и CSRF — это не экзотика, а самые частые способы взлома сайтов. Они живут в коде: в самописных запросах, в выводе пользовательских данных и в формах без токенов. Мы находим эти места и закрываем их по правилам ядра Битрикс и рекомендациям OWASP.

Самописные SQL-запросы склеиваются из строк с данными из адреса и форм — открыта дорога SQL-инъекции.
Переводим запросы на параметризацию и API ядра (D7, CDBResult), данные больше не попадают в тело SQL напрямую.
Данные пользователя выводятся в HTML без экранирования — чужой скрипт исполняется в браузере посетителя (XSS).
Экранируем весь вывод нужным способом для HTML, атрибутов и JS, включаем Content Security Policy против инъекции скриптов.
Формы и действия выполняются без проверки токена — злоумышленник подделывает запрос от лица вошедшего пользователя (CSRF).
Защищаем формы и AJAX токеном bitrix_sessid с проверкой check_bitrix_sessid на сервере.
Ввод принимается без проверки типа и формата — числа, e-mail и идентификаторы приходят в неожиданном виде.
Добавляем серверную валидацию и приведение типов: ввод проверяется по белому списку до того, как попадёт в логику.
Загрузка файлов принимает что угодно — через форму заливают веб-шелл и получают контроль над сайтом.
Ограничиваем типы и размер, проверяем содержимое, кладём файлы вне исполняемой зоны и отключаем выполнение в папке загрузок.
Что защищаем

Что входит в защиту от SQLi, XSS и CSRF

Закрываем три самые частые веб-уязвимости и сопутствующие им слабые места ввода и загрузок — прямо в коде сайта на Битрикс, по правилам ядра и рекомендациям OWASP.

Параметризация SQL-запросов

Переводим самописные запросы на API ядра и параметризацию, данные не попадают в тело SQL.

Экранирование вывода против XSS

Весь вывод данных пользователя экранируется по контексту: HTML, атрибут, JS, URL.

Content Security Policy

Настраиваем CSP, чтобы чужие и инлайновые скрипты не исполнялись в браузере посетителя.

CSRF-токены bitrix_sessid

Защищаем формы и AJAX токеном сессии с серверной проверкой check_bitrix_sessid.

Валидация и приведение типов

Ввод проверяется по белому списку формата и типа до попадания в бизнес-логику.

Безопасная загрузка файлов

Контроль типа, размера и содержимого, хранение вне исполняемой зоны, запрет выполнения.

Как это работает

Путь данных пользователя через защищённый код

Данные пользователя проходят три рубежа: валидацию на входе, параметризацию при работе с базой и экранирование на выходе. А действия подтверждаются токеном bitrix_sessid против подделки.

Вводформа · адрес Валидациябелый список Запроспараметризация Выводэкранирование bitrix_sessid Каждый рубеж закрывает свою уязвимость: SQLi, XSS и CSRF
Ввод → валидация → параметризованный запрос → экранированный вывод, а форма закрыта токеном.
Сравнение

Кто закроет уязвимости в коде

Критерий Своими силамиАнтивирус и WAFСтудия B2Bsite
Скорость реакции Зависит от загрузкиМгновенноОт 3 дней
Гарантии Нет, на словахНет, это фильтрДа, гарантия на правки
Прозрачность НизкаяСредняяПолная, отчёт по находкам
Компетенции Знают свой код, но не атакиЛовят симптомы, не причинуSQLi, XSS, CSRF, OWASP
Где исправляется проблема Часть мест пропустятУязвимость остаётся в кодеЧиним корень в коде
Как устраняем

Как мы закрываем уязвимости в коде

01

Поиск опасных мест

Сканируем код и находим прямой SQL, неэкранированный вывод, формы без токенов и небезопасные загрузки.

02

Оценка и приоритет

Ранжируем находки по риску, начинаем с тех, что реально эксплуатируются и ведут к утечке или захвату сайта.

03

Параметризация и экранирование

Переводим запросы на API ядра, экранируем вывод по контексту, чистим точки входа XSS.

04

Токены и валидация

Закрываем формы и AJAX токеном bitrix_sessid, добавляем серверную валидацию ввода и контроль загрузок.

05

Проверка правок

Перепроверяем исправленные места, прогоняем сценарии атак и убеждаемся, что функциональность цела.

06

Отчёт и рекомендации

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

Сроки

Сколько занимает устранение уязвимостей

1 день Экспресс-проверка кода и форм
1
2–3 дня Поиск опасных мест и оценка риска
2
3–7 дней Параметризация SQL и экранирование вывода
3
2–4 дня Токены CSRF, валидация и безопасные загрузки
4
1–2 дня Перепроверка правок и отчёт
5
Подробно об услуге

Защита от SQL-инъекций, XSS и CSRF: что это и зачем

SQL-инъекции, XSS и CSRF — это три классические веб-уязвимости, через которые взламывают сайты чаще всего. Они не зависят от модного фреймворка или редкого модуля, а живут в обычном коде: в самописных запросах к базе, в выводе данных пользователя на страницу и в формах, которые выполняют действия без проверки. Именно поэтому они входят в OWASP Top-10 — отраслевой список самых критичных уязвимостей. Услуга защиты от SQLi, XSS и CSRF на 1С-Битрикс — это устранение этих уязвимостей прямо в коде сайта, а не маскировка их фильтром на входе, который можно обойти.

Разберём по порядку, что каждая из них делает. SQL-инъекция возникает, когда запрос к базе данных собирается из строки и данных пользователя без проверки. Подставив в поле ввода или адрес кусок SQL, атакующий заставляет базу выполнить чужую команду: прочитать чужие заказы, выгрузить базу клиентов, обойти авторизацию. XSS (межсайтовый скриптинг) появляется, когда данные пользователя выводятся в HTML без экранирования — внедрённый скрипт исполняется в браузере другого посетителя и крадёт его сессию или данные. CSRF (подделка запроса) заставляет уже вошедшего пользователя незаметно выполнить нежелательное действие: сменить пароль, оформить заказ, удалить данные. У всех трёх разные точки входа, но общая причина — слепое доверие к данным пользователя.

Чем мы закрываем эти уязвимости

Каждая уязвимость лечится своим средством, и все они есть в арсенале ядра Битрикс. SQL-инъекции закрываются параметризацией запросов и переводом самописного SQL на API ядра — современный слой данных D7 строит запросы безопасно, экранируя и параметризуя значения автоматически. XSS закрывается экранированием вывода по контексту (HTML, атрибут, JavaScript, URL) и политикой Content Security Policy, которая запрещает браузеру исполнять посторонние скрипты. CSRF закрывается токеном bitrix_sessid: он добавляется в формы и AJAX-запросы, а на сервере проверяется функцией check_bitrix_sessid, поэтому подделанный со стороны запрос отсекается.

Главные направления работы по защите от классических уязвимостей:

  • параметризация SQL-запросов и перевод самописного кода на API ядра вместо склейки строк;
  • экранирование вывода данных пользователя по контексту для защиты от XSS;
  • настройка Content Security Policy против исполнения чужих и инлайновых скриптов;
  • защита форм и AJAX токеном bitrix_sessid с серверной проверкой против CSRF;
  • серверная валидация ввода и приведение типов по белому списку формата;
  • безопасная загрузка файлов: контроль типа, размера и содержимого, хранение вне исполняемой зоны.

Кому нужна защита от SQLi, XSS и CSRF

Услуга нужна любому сайту на Битрикс, где есть самописный код, формы, личные кабинеты или загрузка файлов — то есть практически всем коммерческим проектам. Особенно остро это стоит для интернет-магазинов с фильтрами каталога и поиском, B2B-порталов с кабинетами контрагентов, сайтов услуг с заявками и калькуляторами, а также любых проектов, которые принимают и хранят персональные данные клиентов. Чем больше точек ввода и самописной логики, тем выше шанс, что где-то запрос склеен из строки, вывод не экранирован, а форма работает без токена.

Отдельный сигнал к срочной проверке — если сайт уже сталкивался с подозрительной активностью: спам через формы, странные записи в базе, неизвестные файлы в папках, предупреждение браузера или поисковика о вредоносном коде. Это часто следы эксплуатации именно классических уязвимостей. В таком случае устранение SQLi, XSS и CSRF нужно сочетать с удалением последствий взлома, чтобы не только закрыть дыру, но и убрать то, что через неё уже проникло.

Как устроена работа и почему чиним в коде

Многие пытаются закрыть уязвимости фильтром на входе — антивирусом или WAF. Это полезный дополнительный слой, но он лечит симптом, а не причину: отсекает известные шаблоны атак и обходится нестандартной нагрузкой, тогда как сама уязвимость остаётся в коде. Мы идём другим путём — устраняем корень. Сначала находим опасные места: прямой SQL, неэкранированный вывод, формы без токенов, небезопасные загрузки. Затем ранжируем находки по риску и начинаем с того, что реально эксплуатируется и ведёт к утечке или захвату сайта. После этого закрываем каждую уязвимость штатным средством ядра и перепроверяем правки сценариями атак, убеждаясь, что функциональность не пострадала.

Всю свою логику мы выносим в собственные модули и обработчики и не правим ядро Битрикс напрямую, поэтому обновления платформы проходят без конфликтов, а защита остаётся на месте. По итогу вы получаете закрытые уязвимости, понятный отчёт о найденном и исправленном и рекомендации, чтобы новые слабые места не появлялись в новом коде. На исправленные места даём гарантию: найденная уязвимость не вернётся, а сайт перестаёт быть лёгкой добычей для самых дешёвых и массовых атак.

Кому и что даёт

Ценность для каждой роли

Сайт не уводят за минуты

Закрытые SQLi, XSS и CSRF лишают атакующих самых дешёвых способов взлома и кражи данных.

Нет утечек и дефейса

Данные клиентов и заказов не утекают через инъекцию, а главная не подменяется чужим скриптом.

Меньше репутационных рисков

Сайт не попадает в чёрные списки и не раздаёт вредоносный код посетителям.

Понятный отчёт

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

Запросы по правилам ядра

Прямой SQL уходит в API D7 и параметризацию, чужие данные больше не склеиваются в строку запроса.

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

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

Токены в формах

Формы и AJAX получают bitrix_sessid с серверной проверкой, подделка запросов отсекается.

Чистая кодовая база

Опасные места исправлены единообразно, остаётся понятный паттерн для новых правок.

Формы работают и защищены

Заявки, подписки и калькуляторы остаются удобными, но больше не служат каналом атаки.

Нет спама через инъекцию

Поля форм проверяются, через них не подставляют ссылки и скрипты в письма и страницы.

Чистая выдача

Сайт без вредоносного кода не теряет позиции и не отпугивает пользователей предупреждением браузера.

Доверие посетителей

Личные кабинеты и оплата защищены, клиент спокойно оставляет данные.

Эффект после устранения

Что меняется в безопасности сайта

OWASP
классика Top-10 закрыта в коде
−95%
поверхности для инъекций после правок
0
правок ядра — логика в своих модулях
CSP
политика против исполнения чужих скриптов

Ориентиры по проектам нашей команды. Точную картину по вашему сайту покажем на бесплатной экспресс-проверке кода.

Тарифы

Сколько стоит закрыть SQLi, XSS и CSRF

Стоимость зависит от объёма самописного кода, числа форм и точек ввода. Ниже — ориентиры; точную смету присылаем после экспресс-проверки, бесплатно.

Точечно
от 25 000 ₽
Срок: от 3 дней

Закрываем конкретные найденные уязвимости в одной зоне сайта.

  • Разбор найденных мест
  • Параметризация запросов
  • Экранирование вывода
  • Перепроверка правок
Популярный выбор
Комплекс
от 70 000 ₽
Срок: от 7 дней

Системно закрываем SQLi, XSS и CSRF по всему самописному коду.

  • Поиск по всему коду
  • Параметризация и экранирование
  • CSRF-токены во всех формах
  • Валидация ввода
  • Content Security Policy
  • Отчёт с находками
Под нагрузку
от 160 000 ₽
Срок: от 14 дней

Крупный сайт со сложной логикой, кабинетами и интеграциями.

  • Все возможности «Комплекс»
  • Безопасная загрузка файлов
  • Защита API и AJAX
  • Стандарт безопасного кода
  • Обучение команды
  • Сопровождение правок
Точечно от 25 000 ₽
Срок: от 3 дней

Закрываем конкретные найденные уязвимости в одной зоне сайта.

  • Разбор найденных мест
  • Параметризация запросов
  • Экранирование вывода
  • Перепроверка правок
Популярный Комплекс от 70 000 ₽
Срок: от 7 дней

Системно закрываем SQLi, XSS и CSRF по всему самописному коду.

  • Поиск по всему коду
  • Параметризация и экранирование
  • CSRF-токены во всех формах
  • Валидация ввода
  • Content Security Policy
  • Отчёт с находками
Под нагрузку от 160 000 ₽
Срок: от 14 дней

Крупный сайт со сложной логикой, кабинетами и интеграциями.

  • Все возможности «Комплекс»
  • Безопасная загрузка файлов
  • Защита API и AJAX
  • Стандарт безопасного кода
  • Обучение команды
  • Сопровождение правок

Дополнительные опции

Настройка Content Security Policy от 20 000 ₽
Аудит и защита загрузки файлов от 25 000 ₽
Стандарт безопасной разработки для команды от 40 000 ₽
Расчёт выгоды

Сколько стоит не закрыть уязвимость

Прикиньте возможные потери от успешной атаки через SQL-инъекцию, XSS или CSRF: простой сайта, утечка данных и восстановление обходятся куда дороже своевременных правок в коде.

Возможные потери от инцидента 0 ₽

Оценка по формуле: дни простоя × выручка в день + стоимость восстановления. Это ориентир потерь, а не гарантия. Не учитывает штрафы за утечку персональных данных и отток клиентов.

Умный расчёт

Экспресс-проверка: насколько уязвим ваш код

Ответьте на несколько вопросов о формах, запросах и загрузках — прикинем риск SQLi, XSS и CSRF на вашем сайте и предложим план устранения.

Вопрос 1
Загрузка вопроса…

Примеры работ

Кейсы устранения уязвимостей

Интернет-магазин

Закрыли SQL-инъекцию в фильтре каталога

Самописный фильтр склеивал запрос из параметров адреса. Перевели на параметризацию и API ядра, инъекция стала невозможна.

12 → 0Опасных запросов
4 дняСрок
0Правок ядра
B2B-портал

Убрали XSS в кабинете и включили CSP

Данные профиля выводились без экранирования. Заэкранировали вывод по контексту и настроили Content Security Policy против чужих скриптов.

8 → 0Точек XSS
включёнCSP
6 днейСрок
Услуги

Защитили формы токенами от CSRF

Формы и AJAX выполняли действия без проверки токена. Добавили bitrix_sessid с серверной проверкой и валидацию ввода.

14Форм защищено
отсеченаПодделка запроса
5 днейСрок
Отзывы клиентов

Что говорят после устранения уязвимостей

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

Дмитрий Руководитель интернет-магазина

«У нас в кабинете выводились данные пользователей без экранирования — потенциальный XSS. Закрыли вывод и настроили CSP. Отдельно ценю, что показали, как писать безопасно дальше.»

Анна Менеджер проекта, B2B-портал

«Защитили все формы токенами от подделки запросов и добавили валидацию. Спам через подстановку прекратился, заявки приходят чистые. Сделали в срок и без правок ядра.»

Сергей Владелец сайта услуг

«Заказывали комплекс: прошли по всему самописному коду, закрыли инъекции, XSS и небезопасную загрузку файлов. Через неё к нам уже пытались залить шелл — теперь это невозможно.»

Ольга IT-директор дистрибьютора
Почему мы

На что можно рассчитывать по договору

Чиним причину, а не симптом

Закрываем уязвимость в коде, а не маскируем её фильтром, который можно обойти.

По правилам ядра Битрикс

Используем API D7, параметризацию и bitrix_sessid, не правим ядро напрямую.

Опыт реальных атак

Знаем, как эксплуатируют SQLi, XSS и CSRF, и проверяем правки сценариями атак.

Гарантия на исправления

Перепроверяем закрытые места и даём гарантию, что найденная уязвимость не вернётся.

База знаний

Частые проблемы с уязвимостями — и наш ответ

Это не общие советы из интернета, а закономерности из реальных проектов по устранению уязвимостей. Каждый ответ — позиция нашей команды.

SQLi

У нас самописный фильтр каталога, есть ли там инъекция

Наш ответ

Самописные фильтры — самое частое место SQL-инъекций, потому что запрос собирается из параметров адреса. Проверяем код, переводим запрос на параметризацию и API ядра — данные перестают попадать в тело SQL, и подставить туда команду уже нельзя. Поведение фильтра для пользователя не меняется.

XSS

Боимся, что экранирование вывода поломает наши тексты

Наш ответ

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

CSRF

Через формы идёт спам с подставленными ссылками

Наш ответ

Это признак отсутствия токена и валидации. Закрываем формы и AJAX токеном bitrix_sessid с серверной проверкой и добавляем проверку полей по белому списку. Подделанные со стороны запросы отсекаются, а через поля перестают подставлять ссылки и скрипты. Заявки приходят чистые.

Загрузки

Форма принимает любые файлы, это опасно

Наш ответ

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

Экспертный взгляд

Закрыть уязвимости в коде или поставить фильтр на входе

Когда речь заходит о SQL-инъекциях, XSS и CSRF, у бизнеса обычно возникает соблазн закрыть проблему быстро и снаружи: поставить антивирус, подключить WAF, включить облачный фильтр. На бумаге это выглядит проще и дешевле, чем разбираться в коде. Но классические уязвимости живут именно в коде, и фильтр на входе их не лечит — он лишь отсекает часть известных атак. Ниже разбираем, чем это отличается, почему мы чиним корень и как строим работу так, чтобы сайт перестал быть лёгкой добычей.

Почему классические уязвимости так опасны

SQLi, XSS и CSRF — это не редкие узкоспециальные дыры, а массовые уязвимости, которые сканеры и боты ищут на любом сайте автоматически. Им не нужен целевой интерес именно к вашему бизнесу: достаточно, чтобы где-то нашёлся склеенный запрос, неэкранированный вывод или форма без токена. Через SQL-инъекцию выгружают базу клиентов и заказов, обходят авторизацию, иногда захватывают сайт целиком. Через XSS крадут сессии посетителей и подменяют содержимое страниц. Через CSRF выполняют действия от лица вошедших пользователей. И всё это — на коде, который годами работал и казался надёжным, просто потому что им никто не интересовался.

Дополнительная опасность в том, что последствия редко видны сразу. База может утекать незаметно, вредоносный скрипт — работать только у части посетителей, а подделанные действия — теряться в общем потоке. Часто о проблеме узнают, когда сайт уже в чёрных списках поисковиков, браузер пугает посетителей предупреждением, а клиенты сообщают о списаниях или спаме. К этому моменту устранять приходится не только уязвимость, но и её последствия.

Чем фильтр на входе отличается от исправления в коде

WAF и антивирус работают по принципу распознавания: они смотрят на входящий трафик и отсекают то, что похоже на атаку по известным шаблонам. Это полезный слой, особенно против массовых ботов, и мы не отговариваем от него. Но у него два принципиальных ограничения. Во-первых, он лечит симптом, а не причину: уязвимость остаётся в коде, и достаточно нестандартной нагрузки, чтобы её обойти. Во-вторых, он не знает контекста вашего приложения — что для одной формы нормально, для другой атака. Поэтому фильтр либо пропускает изобретательные атаки, либо ложно блокирует легитимных пользователей.

Исправление в коде устроено иначе. Параметризованный запрос в принципе не может быть атакован инъекцией, потому что данные физически отделены от команды. Экранированный вывод не исполнит чужой скрипт, потому что браузер видит его как текст. Форма с проверкой токена отвергнет подделанный запрос, потому что у атакующего нет секрета. Это не вероятностная защита, а структурная: уязвимости просто нет. Поэтому правильный порядок такой — закрыть корень в коде, а фильтр держать как дополнительную страховку, а не как единственную линию обороны.

Как мы находим и закрываем SQL-инъекции

Начинаем с самописного кода: фильтры каталога, поиск, выгрузки, отчёты, личные кабинеты — везде, где запрос к базе может собираться из строки с данными пользователя. Находим такие места и переводим их на параметризацию и API ядра. Современный слой данных D7 строит запросы безопасно: значения экранируются и параметризуются автоматически, и подставить SQL в них уже нельзя. Если прямой запрос по какой-то причине неизбежен, используем штатные методы экранирования соединения с базой. После правок инъекция перестаёт быть возможной не потому, что мы поймали конкретную атаку, а потому что данные больше не попадают в тело команды. Если устранение инъекций нужно делать в рамках более широкой проверки, мы совмещаем его с анализом и поиском уязвимостей, чтобы увидеть всю картину сразу.

Как мы закрываем XSS

XSS лечится в двух плоскостях. Первая — экранирование вывода: проходим по всем местам, где данные пользователя попадают на страницу, и экранируем их правильным для контекста способом. Для HTML один способ, для значения атрибута другой, для вставки в JavaScript третий, для URL четвёртый — смешивать их нельзя, иначе защита дырявая. Особое внимание уделяем админке и кабинетам, где скрипт исполнился бы в сессии с высокими правами. Вторая плоскость — Content Security Policy: настраиваем заголовки так, чтобы браузер не исполнял посторонние и инлайновые скрипты, даже если они каким-то образом попали на страницу. Получается два рубежа, которые дополняют друг друга.

Как мы закрываем CSRF и проверяем ввод

CSRF закрывается токеном bitrix_sessid. Мы добавляем его в формы и AJAX-запросы, которые что-то меняют, и проверяем на сервере функцией check_bitrix_sessid. Сторонний сайт не знает токена и не может подделать запрос. Параллельно проверяем права: действие должен выполнять именно тот пользователь, у которого они есть, иначе CSRF превращается в обход доступа. Поверх токенов добавляем серверную валидацию ввода — проверку по белому списку формата и типа. Токен подтверждает, что запрос настоящий, валидация — что данные корректны, экранирование — что вывод безопасен. Эти три механизма работают в связке и закрывают большинство сценариев атак на формы.

Загрузка файлов и сопутствующие риски

Отдельная и часто недооценённая зона — загрузка файлов. Если форма принимает любые файлы и кладёт их в исполняемую папку, через неё заливают веб-шелл и получают контроль над сервером. Мы ограничиваем разрешённые типы и размер, проверяем реальное содержимое файла, а не только расширение, храним загрузки вне исполняемой зоны и запрещаем выполнение скриптов в этой папке. Заодно проверяем, нет ли уже залитого шелла, и при необходимости подключаем устранение уязвимостей и последствий, если сайт уже пострадал. Рядом с загрузками часто всплывает IDOR — доступ к чужим объектам по подменённому идентификатору; такие места мы тоже закрываем проверкой прав.

Как мы ведём работу по шагам

Чтобы результат был предсказуемым, делим работу на понятные этапы. Первый — поиск опасных мест: сканируем код и находим прямой SQL, неэкранированный вывод, формы без токенов, небезопасные загрузки. Второй — оценка и приоритет: ранжируем находки по риску и начинаем с того, что реально эксплуатируется. Третий — собственно исправление: параметризация, экранирование, токены, валидация, контроль загрузок. Четвёртый — перепроверка: прогоняем сценарии атак на исправленные места и убеждаемся, что функциональность цела. Пятый — отчёт и рекомендации, чтобы новые уязвимости не появлялись в новом коде. Каждую правку мы готовим и проверяем на копии, а на боевой сайт выкатываем без простоя.

Почему правки совместимы с обновлениями

Мы закрываем уязвимости средствами самого ядра Битрикс и не правим его файлы напрямую. Параметризация через API, штатное экранирование, bitrix_sessid — всё это родные механизмы платформы. Свою логику выносим в собственные модули и обработчики, поэтому обновления Битрикса проходят без конфликтов, а защита остаётся на месте. Это принципиальный момент: правки, которые ломаются при первом же обновлении, не имеют смысла, потому что уязвимости возвращаются. Наш подход рассчитан на то, чтобы код оставался защищённым годами, а не до ближайшего апдейта.

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

«У нас стоит WAF, разве этого мало». WAF — хорошая страховка, но он не убирает уязвимость из кода и обходится нестандартной нагрузкой. Закрыв корень в коде, вы получаете структурную защиту, а WAF становится дополнительным, а не единственным рубежом. «Сайт давно работает, никто не взламывал». Отсутствие известного взлома не значит, что его не было: утечки часто незаметны. Боты сканируют сайты непрерывно, и наличие уязвимости — это вопрос времени. «Боимся, что правки сломают функциональность». Параметризация и экранирование не меняют поведение для пользователя — меняется только внутренняя обработка данных. Мы перепроверяем каждый сценарий перед публикацией, поэтому видимая работа сайта остаётся прежней.

Где чаще всего прячутся уязвимости на сайтах Битрикс

За годы работы складывается понятная карта мест, где классические уязвимости встречаются снова и снова. На первом месте — самописные фильтры и поиск по каталогу: разработчик собирает запрос из параметров адреса, чтобы быстро сделать гибкую выборку, и тем самым открывает дорогу инъекции. Второе типичное место — личные кабинеты и формы профиля, где данные одного пользователя выводятся другим без экранирования, что создаёт хранимый XSS. Третье — обработчики AJAX, которые меняют данные, но не проверяют токен и права, превращаясь в готовую точку для подделки запроса. Четвёртое — формы загрузки документов, аватаров и прайсов, принимающие файлы без проверки содержимого.

Отдельно стоит упомянуть интеграции и импорт данных. Когда сайт принимает выгрузки из внешних систем, прайсы поставщиков, заказы из мобильного приложения или данные из 1С, эти источники нередко считают доверенными и не проверяют так же строго, как ввод посетителя. Но скомпрометированный внешний канал — это та же точка входа для инъекции и XSS. Поэтому мы проверяем не только публичные формы, но и все места, где в систему попадают данные извне, включая API и фоновые обработчики импорта.

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

Исправить код мало — нужно убедиться, что атака больше не проходит, а функциональность не пострадала. Поэтому после каждой правки мы воспроизводим сценарий атаки на исправленном месте: пытаемся подставить SQL в параметризованный запрос, внедрить скрипт в экранированный вывод, отправить форму без токена, загрузить файл с исполняемым содержимым. Если защита держится, фиксируем результат в отчёте. Параллельно прогоняем обычные пользовательские сценарии — оформление заказа, авторизацию, отправку заявки, — чтобы убедиться, что для посетителя ничего не изменилось. Такая двойная проверка отличает реальное устранение уязвимости от формальной правки «на глаз».

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

Что вы получаете по итогу

По завершении работы вы получаете закрытые в коде SQL-инъекции, XSS и CSRF, отчёт со списком найденного и исправленного простым языком и рекомендации, чтобы слабые места не появлялись в новом коде. На исправленные места даём гарантию: найденная уязвимость не вернётся. По желанию готовим для вашей команды стандарт безопасной разработки — короткий набор правил по запросам, выводу, формам и загрузкам, который не даёт повторно допускать те же ошибки. Если уязвимостей много или есть проблемы с конфигурацией и доступом, предлагаем дополнить устранение классики проактивной защитой Битрикс, чтобы закрыть и код, и настройки в комплексе.

С чего начать

Начните с бесплатной экспресс-проверки. Мы посмотрим на формы, запросы и точки ввода вашего сайта, прикинем риск SQLi, XSS и CSRF и покажем реальный объём работы. По её итогам вы получите честную картину: где находятся опасные места, что закрывать в первую очередь и за какой срок. Никакого запугивания и навязывания — только конкретные находки и понятный план. Расскажите о вашем сайте, и мы превратим его из лёгкой добычи для массовых атак в защищённый проект, которому классические уязвимости больше не страшны.

Вопросы и ответы

Частые вопросы о защите от SQL-инъекций, XSS и CSRF

Что такое SQL-инъекция простыми словами? +

SQL-инъекция — это когда злоумышленник подставляет в поле ввода или адрес страницы кусок SQL-команды, и он исполняется вашей базой данных. Так бывает, когда запрос к базе склеивается из строки и данных пользователя без проверки. Через инъекцию можно прочитать чужие заказы, выгрузить базу клиентов, обойти авторизацию или даже захватить сайт. Лечится переводом запросов на параметризацию: данные передаются базе отдельно от текста команды и уже не могут его изменить.

Что такое XSS и чем он опасен? +

XSS (межсайтовый скриптинг) — это внедрение чужого JavaScript в страницу вашего сайта. Происходит, когда данные пользователя выводятся в HTML без экранирования: например, имя из профиля или текст отзыва. Подставленный скрипт исполняется в браузере другого посетителя и может украсть его сессию, перехватить данные форм или подменить содержимое страницы. Защита — экранирование вывода по контексту и политика Content Security Policy, которая запрещает исполнять посторонние скрипты.

Что такое CSRF-атака? +

CSRF (межсайтовая подделка запроса) — это когда посетителя обманом заставляют выполнить действие на сайте, где он уже авторизован: например, сменить пароль, оформить заказ или удалить данные. Браузер сам подставляет cookie сессии, и сервер принимает запрос за настоящий. Защита — секретный токен, который знает только ваш сайт и проверяет при каждом действии. В Битрикс для этого есть bitrix_sessid и проверка check_bitrix_sessid.

Что такое OWASP Top-10? +

OWASP Top-10 — это регулярно обновляемый список самых критичных уязвимостей веб-приложений, составленный международным сообществом по безопасности. В него традиционно входят инъекции (включая SQL), XSS, подделка запросов и слабый контроль доступа. Это де-факто отраслевой стандарт того, что нужно проверять в первую очередь. Мы ориентируемся на OWASP, закрывая классические уязвимости в коде вашего сайта на Битрикс.

Чем эти три уязвимости отличаются друг от друга? +

Коротко: SQL-инъекция атакует базу данных через ввод, XSS атакует браузер другого посетителя через неэкранированный вывод, а CSRF заставляет вошедшего пользователя выполнить нежелательное действие. У них разные точки входа и разная защита, но объединяет одно — все три эксплуатируют доверие к данным пользователя. Поэтому мы закрываем их в комплексе: проверяем ввод, экранируем вывод и подтверждаем действия токеном.

Как понять, что у меня есть SQL-инъекция? +

Надёжно — только проверкой кода. Признаки риска: на сайте есть самописные запросы к базе, которые собираются из строк с данными из адреса, форм или cookie, без использования API ядра. Особенно опасны фильтры каталога, поиск, выгрузки и личные кабинеты. Мы находим такие места при экспресс-проверке и показываем, какие из них реально эксплуатируются.

Что такое параметризация запросов? +

Параметризация — это способ передать базе данные отдельно от текста SQL-команды. Вы пишете шаблон запроса с метками для значений, а сами значения передаёте отдельным списком. База подставляет их как данные, а не как часть команды, поэтому подставить туда вредоносный SQL уже нельзя. Это основной и самый надёжный способ защиты от инъекций.

Помогает ли API ядра Битрикс от инъекций? +

Да. Современный слой данных D7 и ORM Битрикс строят запросы безопасно: значения экранируются и параметризуются автоматически. Когда мы переводим самописные склеенные запросы на API ядра, поверхность для инъекций резко сокращается. Если прямой SQL по какой-то причине неизбежен, используем штатные методы экранирования соединения с базой.

А если убрать инъекцию через WAF, этого хватит? +

WAF (фильтр на входе) помогает как дополнительный слой, но не лечит причину. Он отсекает известные шаблоны атак, однако обходится нестандартными нагрузками, а уязвимость остаётся в коде. Правильный подход — закрыть инъекцию в коде через параметризацию, а WAF держать как страховку. Мы делаем именно так: чиним корень, а не маскируем симптом.

Что значит «экранировать вывод»? +

Экранирование — это превращение опасных символов в безопасные при выводе данных на страницу. Например, угловые скобки заменяются так, что браузер показывает их как текст, а не как тег. Важно экранировать по контексту: для HTML, для значения атрибута, для вставки в JavaScript и для URL способы разные. Мы проходим по всем местам вывода данных пользователя и закрываем их правильным способом.

Что такое Content Security Policy? +

Content Security Policy (CSP) — это набор правил в заголовках ответа, который говорит браузеру, откуда можно загружать и исполнять скрипты, стили и другие ресурсы. Грамотно настроенный CSP не даёт исполниться чужому или инлайновому скрипту, даже если он каким-то образом попал на страницу. Это второй рубеж защиты от XSS поверх экранирования вывода.

Бывает ли XSS в админке и кабинетах? +

Да, и там он особенно опасен. Если данные, которые ввёл один пользователь, выводятся другому или администратору без экранирования, атакующий может выполнить скрипт в чужой сессии с высокими правами. Поэтому мы проверяем не только публичные страницы, но и личные кабинеты, формы обратной связи, отзывы, имена и любые поля, попадающие в вывод.

Не сломает ли экранирование вёрстку и тексты? +

Нет, при правильном применении. Экранируется именно вывод данных пользователя, а не разметка шаблона. Если где-то нужен ограниченный HTML — например, форматированный текст в отзыве — мы используем санитайзер, который оставляет безопасные теги и вырезает скрипты. Содержимое и вёрстка остаются на месте, исчезает только возможность подставить исполняемый код.

Как bitrix_sessid защищает от CSRF? +

bitrix_sessid — это секретный токен сессии, который Битрикс генерирует для каждого пользователя. Мы добавляем его скрытым полем в формы и параметром в AJAX-запросы, а на сервере проверяем функцией check_bitrix_sessid. Сторонний сайт не знает этого токена и не может подделать запрос, поэтому подделанные действия отсекаются. Это штатный механизм ядра, проверенный и совместимый с обновлениями.

Нужно ли защищать токеном все формы? +

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

Защищены ли AJAX-запросы от подделки? +

Должны быть, но часто это упускают. AJAX-обработчики, которые что-то меняют, так же уязвимы к подделке запроса, как обычные формы. Мы добавляем в них передачу и проверку bitrix_sessid, а также проверяем, что действие выполняет именно тот пользователь, у которого есть на это право. Так закрывается и CSRF, и связанный с ним обход прав.

Что такое валидация ввода и зачем она при формах? +

Валидация — это проверка данных по белому списку: число должно быть числом в нужном диапазоне, e-mail — корректным адресом, идентификатор — существующим и доступным этому пользователю. Без неё в логику попадает мусор и вредоносные значения. Валидация работает в связке с токенами и экранированием: токен подтверждает, что запрос настоящий, валидация — что данные корректны, экранирование — что вывод безопасен.

Чем опасна загрузка файлов на сайт? +

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

Что такое веб-шелл? +

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

Что такое IDOR и связан ли он с этими уязвимостями? +

IDOR (небезопасная прямая ссылка на объект) — это когда, подменив идентификатор в адресе или запросе, пользователь получает доступ к чужим данным: чужому заказу, документу, профилю. Формально это не SQLi и не XSS, но живёт рядом и часто всплывает при той же проверке кода. Лечится проверкой прав на каждый объект. При устранении уязвимостей мы закрываем и такие места, если находим их.

Не сломаются ли правки при обновлении Битрикса? +

Нет. Мы закрываем уязвимости средствами ядра — параметризацией, штатным экранированием, bitrix_sessid — и выносим свою логику в собственные модули и обработчики, не правя ядро напрямую. Поэтому обновления Битрикса проходят без конфликтов, а защита остаётся на месте. Это закладывается в подход с первого дня.

Сколько стоит закрыть SQLi, XSS и CSRF? +

Точечное устранение конкретных уязвимостей в одной зоне начинается от 25 000 рублей, системная работа по всему самописному коду — от 70 000. Цена зависит от объёма кода, числа форм и точек ввода. Точную смету присылаем после бесплатной экспресс-проверки, на которой видно реальный объём.

За какой срок реально устранить уязвимости? +

Экспресс-проверку делаем за день, точечные правки — от 3 дней, системную работу по всему коду — от 7 дней. Срок зависит от объёма самописного кода и числа форм. Мы фиксируем его в смете до старта и сначала закрываем то, что реально эксплуатируется.

Можно ли работать без остановки сайта? +

Да. Правки готовим и проверяем на копии или тестовом контуре, а на боевой сайт выкатываем аккуратно, без простоя. Параметризация запросов и экранирование вывода не меняют поведение для пользователя — меняется только то, как обрабатываются данные внутри. Функциональность мы перепроверяем перед публикацией.

Что я получу по итогу работы? +

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

А если уязвимостей много и нужна полная защита? +

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

Состав работ

Что именно мы делаем по защите кода

Поиск прямого SQL и склеенных запросов в коде
Перевод запросов на параметризацию и API ядра D7
Поиск неэкранированного вывода данных пользователя
Экранирование вывода по контексту против XSS
Настройка Content Security Policy в заголовках
Защита форм и AJAX токеном bitrix_sessid
Серверная валидация и приведение типов ввода
Контроль типа, размера и хранения загружаемых файлов
Перепроверка правок сценариями атак и отчёт
Начать проект

Закроем уязвимости в коде вашего сайта?

Расскажите о вашем сайте на Битрикс — проведём бесплатную экспресс-проверку, покажем найденные уязвимости и пришлём план устранения в течение рабочего дня.

  • Ответим в течение рабочего дня
  • Бесплатный аудит процессов и расчёт
  • NDA и фиксированная смета