1. Использование API Битрикса (ORM и D7)
Наиболее эффективный и рекомендованный метод — всегда использовать стандартные функции и классы API платформы для работы с базой данных, а не писать прямые SQL-запросы.
-
D7 API (Новый стандарт): В современных версиях Битрикса используйте ORM (Object-Relational Mapping) на базе D7 API для работы с сущностями и моделями данных. D7 автоматически обрабатывает данные, используя подготовленные запросы, что исключает возможность SQL-инъекции.
-
Пример: Использование классов
\Bitrix\Main\Entity\DataManagerи\Bitrix\Main\ORM\Query\Query.
-
-
Старый API: Для устаревшего кода используйте функции
CDatabase, которые предоставляют методы для работы с БД, в том числе для экранирования данных. Однако, переход на D7 является приоритетом. -
Функции фильтрации: Всегда используйте функции API для работы с пользовательским вводом в компонентах и модулях, такие как
htmlspecialchars(),strip_tags()и специализированные функции Битрикса для очистки данных.
2. Параметризованные Запросы (Prepared Statements)
Если по какой-то причине вы вынуждены писать прямой SQL-запрос, обязательно используйте механизм подготовленных запросов, который предоставляет Битрикс.
-
Суть: В запросе используются плейсхолдеры (
?или именованные) вместо фактических данных. СУБД (например, MySQL) обрабатывает структуру запроса отдельно от пользовательских данных, гарантируя, что ввод будет трактоваться как строковое значение, а не как исполняемая команда. -
Реализация в Битриксе: Используйте метод
queryExecute()объекта\Bitrix\Main\DB\Connection, передавая параметры отдельным массивом, что по сути реализует подготовленные запросы.
3. Экранирование и Приведение Типов (Escaping & Type Casting)
Это базовые меры, используемые в крайних случаях или как дополнение к основным:
-
Экранирование (Escaping): Для старого кода или в критичных местах используйте метод
ForSql()объектаglobal $DB(или его аналогов в новом ядре) для экранирования специальных символов (например, кавычек) в пользовательском вводе. Не полагайтесь только на этот метод. -
Приведение Типов (Type Casting): Если вы ожидаете, что пользователь введет число (ID, количество), обязательно приводите входные данные к целому типу (
(int)$_GET['id']илиintval($_POST['count'])) перед использованием в запросе. Это мгновенно делает инъекцию невозможной, так как все символы, кроме цифр, будут отброшены.
4. Принцип Наименьших Привилегий
Это архитектурное требование:
-
Ограничение прав: Учетная запись базы данных, которую использует веб-приложение Битрикс, должна иметь минимально необходимые права.
-
Действие: У нее не должно быть прав на выполнение системных команд, создание или удаление баз данных/таблиц, кроме тех, которые необходимы для штатной работы сайта. Это ограничивает ущерб, который может нанести успешная SQL-инъекция.
5. Модуль "Проактивная защита"
Платформа Битрикс предлагает встроенный модуль "Проактивная защита", который включает следующие инструменты:
-
Веб-Антивирус: Помогает обнаруживать и блокировать вредоносный код, включая попытки инъекций.
-
Анти-DDoS: Защита от высокочастотных атак.
-
WAF (Web Application Firewall - Экран): Включает фильтрацию на уровне веб-приложения, которая может блокировать известные паттерны SQLi в HTTP-запросах, прежде чем они достигнут кода.
Важно: WAF — это дополнительный барьер, а не замена безопасному коду. Он защищает от массовых атак, но не гарантирует защиту от целенаправленного, "ручного" взлома.
Ключевой Принцип
Никогда не доверяйте пользовательскому вводу! Всегда используйте Параметризованные Запросы (D7 API) и приведение типов для защиты от SQL-инъекций.