Код-ревью проекту на 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Код-ревью проекту на 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Код-рев'ю проєкту на 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 проти старого ядра:

Що використовувати Старе ядро 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

Процес рев'ю

  1. Статичний аналіз — запускаємо PHPStan (level 5–6) та PHP_CodeSniffer з правилами PSR-12. Автоматично виявляє ~40% проблем.

  2. Ручний аналіз — перевіряємо ключові підсистеми: компоненти каталогу, оформлення замовлення, інтеграція з 1С, модулі авторизації.

  3. Профілювання запитів — вмикаємо define('BX_DEBUG', true) на dev-стенді, перевіряємо кількість SQL-запитів на сторінках каталогу та картці товару. Норма — до 30 запитів. Більше 100 — системна проблема.

  4. Звіт — структурований документ з класифікацією проблем за критичністю (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, зберігання секретів
  • Підсумковий звіт з класифікацією за критичністю та рекомендаціями
  • Консультація щодо плану рефакторингу