Yandex Metrika
sanches.free 1 просмотр

Уязвимости веб-приложений в проектах на Битрикс: SQL, XSS, CSRF и clickjacking

Почему «на Битрикс» не равно «уже безопасно»

Ядро и модули уходят от сырого SQL через ORM и высокоуровневые API, но любой кастомный скрипт, интеграцию или «быстрый» отчёт можно написать так, что классические веб-уязвимости снова становятся актуальными. Ниже — четыре частых класса проблем и то, как с ними работать в экосистеме Битрикс.

SQL-инъекции

Суть: в текст запроса попадают непроверенные данные, и злоумышленник меняет логику WHERE, объединяет выборки или читает лишние строки.

В типовом коде платформы запросы параметризуются или собираются через обёртки, поэтому риск ниже, чем в «голом» PHP. Но стоит один раз написать что-то вроде $DB->Query('SELECT … WHERE id='.$_GET['id']) без нормализации — и дыра на месте.

Практика. Числовые идентификаторы приводите к типу сразу: (int)$_GET['id'] или intval(). Строки экранируйте через $DB->ForSql() или, лучше, не конкатенируйте SQL вообще — используйте API уровня CUser::GetByID, инфоблоков, D7 ORM. Сомневаетесь — пробуйте сломать свой же эндпоинт кавычками, пробелами и конструкциями вроде OR 1=1.

XSS (межсайтовый скриптинг)

Если значение из базы или формы попадает в HTML без экранирования, в страницу можно внедрить разметку или обработчики событий. Пример с «картинкой по URL»: достаточно кавычки в атрибуте src, чтобы выйти из него и добавить, скажем, onload с отправкой cookie на чужой хост.

Практика в Битрикс. Для вывода в шаблон используйте htmlspecialcharsbx() — это обёртка над htmlspecialchars с учётом кодировки сайта. Если выбираете элементы инфоблока через CIBlockElement::GetList и GetNext(), помните про префикс ~ у полей с «сырым» HTML: такие значения нельзя подставлять в разметку вслепую.

Проверка: сохраните тестовую строку с кавычками и угловыми скобками и посмотрите исходный HTML — вне тегов текст должен быть закодирован.

CSRF

Сайт принимает POST и доверяет ему только потому, что запрос пришёл из браузера администратора. Внешняя страница с автоотправкой формы на ваш домен может заставить браузер выполнить действие от его имени.

Практика в Битрикс. В форму добавьте bitrix_sessid_post(), а в обработчике проверяйте check_bitrix_sessid() до любых изменений данных. Без совпадения токена сессии запрос отбрасывается, даже если пользователь админ и куки живы.

Clickjacking

Злоумышленник вкладывает вашу админку в невидимый iframe и подставляет её под свою кнопку: пользователь думает, что жмёт «Скачать котиков», а клик уходит в ваш интерфейс.

Практика. Удерживайте включённой защиту от встраивания во фреймы в «Проактивной защите» (заголовки вроде X-Frame-Options / политика по фреймам). Если из-за этого перестаёт открываться, например, Вебвизор Метрики, не отключайте защиту глобально — настраивайте исключения точечно; один из подходов разобран в материале про Битрикс, защиту от фреймов и Яндекс Метрику.

Итог

Битрикс даёт инструменты (экранирование, сессия, проактивная защита), но ответственность за кастом остаётся на проекте: не склеивать SQL из GET/POST, экранировать вывод, проверять sessid на действиях и не отключать антифрейм без веской причины.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии