Код-ревью проекта на 1С-Битрикс
Когда проект переходит к новой команде, накапливает кастомный код за несколько лет или готовится к масштабированию — нужен независимый взгляд на качество кода. Код-ревью Битрикс-проекта сложнее стандартного: нужно понимать и современные PHP-практики, и специфику ядра Битрикс — как работать с компонентами правильно, когда использовать D7 API вместо старого ядра, почему прямые запросы к b_iblock_element через CIBlockElement::GetList с полным перебором убивают базу.
Что проверяется при ревью
Архитектура и организация кода:
- Наличие кастомных модулей (
/local/modules/) вместо правок в/bitrix/modules/ - Использование пространств имён и автозагрузки
- Разделение логики: контроллеры не содержат SQL, шаблоны не содержат бизнес-логику
- Кастомные таблицы реализованы через
\Bitrix\Main\ORM\Data\DataManager, а не голыми запросами
Работа с базой данных:
Типичные проблемы, которые ищем:
// ПЛОХО: N+1, выборка всех элементов без лимита
while ($arItem = $rsItems->Fetch()) {
$price = \CPrice::GetList([], ['PRODUCT_ID' => $arItem['ID']])->Fetch();
}
// ХОРОШО: предварительная выборка цен пакетом
$productIds = array_column($items, 'ID');
$prices = \Bitrix\Catalog\PriceTable::getList([
'filter' => ['=PRODUCT_ID' => $productIds],
])->fetchAll();
$priceMap = array_column($prices, 'PRICE', 'PRODUCT_ID');
Безопасность:
- SQL-инъекции через конкатенацию запросов без экранирования
- XSS — вывод
$_GET/$_POSTбезhtmlspecialchars() - Прямой доступ к файлам без проверки
B_PROLOG_INCLUDED - Хранение API-ключей в коде вместо настроек модуля
Использование кеша:
- Компоненты с тяжёлыми запросами без кеширования
- Неправильное управление тегами кеша (инвалидация не срабатывает при изменении элемента)
- Отсутствие кеша на AJAX-эндпоинтах каталога
D7 vs старое ядро:
| Что использовать | Старое ядро | D7 API |
|---|---|---|
| Работа с пользователями | CUser::GetByID() |
\Bitrix\Main\UserTable::getById() |
| Инфоблоки | CIBlockElement::GetList() |
\Bitrix\Iblock\ElementTable::getList() |
| Отправка почты | CEvent::Send() |
\Bitrix\Main\Mail\Event::send() |
| Работа с датами | ConvertTimeStamp() |
\Bitrix\Main\Type\DateTime |
Процесс ревью
-
Статический анализ — прогоняем PHPStan (level 5–6) и PHP_CodeSniffer с правилами PSR-12. Автоматически выявляет ~40% проблем.
-
Ручной анализ — проверяем ключевые подсистемы: компоненты каталога, оформление заказа, интеграция с 1С, модули авторизации.
-
Профилирование запросов — включаем
define('BX_DEBUG', true)на dev-стенде, проверяем количество SQL-запросов на страницах каталога и карточке товара. Норма — до 30 запросов. Больше 100 — системная проблема. -
Отчёт — структурированный документ с классификацией проблем по критичности (Critical / High / Medium / Low), примером проблемного кода и рекомендацией по исправлению.
Кейс: маркетплейс на Битрикс, 5 лет разработки
Ситуация: проект разрабатывался 5 лет разными командами, текущий подрядчик сообщает о невозможности добавить новый функционал «из-за кривой архитектуры».
Что нашли при ревью:
- 847 прямых обращений к
$DB->Query()с конкатенацией без экранирования — 12 потенциальных SQL-инъекций - N+1 в компоненте листинга: 1 запрос на список + N запросов на цены (при N=50 — 51 запрос вместо 2)
- 3 места с хранением паролей в MD5 без соли
- Бизнес-логика в файлах
template.phpкомпонентов — невозможно переиспользовать и тестировать - 40% кастомного кода в
/bitrix/— обновление ядра гарантированно ломает сайт
Результат ревью: приоритизированный план рефакторинга на 6 месяцев, разбитый по эпикам. Критические уязвимости устранены за 2 недели.
| Категория | Найдено проблем | Критических |
|---|---|---|
| Безопасность | 18 | 3 |
| Производительность (N+1, отсутствие кеша) | 24 | 5 |
| Архитектура и организация кода | 31 | 0 |
| Устаревшие API (старое ядро) | 67 | 0 |
Что входит в код-ревью
- Статический анализ PHPStan + PHPCS с отчётом по нарушениям
- Ручная проверка ключевых подсистем: каталог, заказы, интеграции, авторизация
- Профилирование SQL-запросов на dev-стенде
- Аудит безопасности: SQL-инъекции, XSS, хранение секретов
- Итоговый отчёт с классификацией по критичности и рекомендациями
- Консультация по плану рефакторинга







