При завантаженні партії хімічних товарів паспорти безпеки часто губляться, прикріплюються до невірного товару або мають неправильні версії. Ручна обробка займає до 2 годин на 100 позицій, а помилки в назвах файлів ведуть до невідповідності юридичним вимогам. Налаштування паспорта безпеки товару 1С-Бітрікс автоматизує цей процес: ми налаштовуємо властивості інфоблоків, пишемо скрипт масового завантаження з ZIP і виводимо посилання на SDS у картці. Результат — менеджер завантажує документи за хвилини, покупець бачить актуальну версію. Наше рішення в 5 разів швидше за ручне завантаження. Вартість налаштування становить від $200, що дозволяє заощадити до $500 на місяць на зарплаті менеджера. Наш досвід — 5 років впроваджень для магазинів хімії, лакофарбових матеріалів та промислового обладнання. Ми виконали понад 20 проектів з автоматизації SDS, обробили більше 10 000 товарів. Гарантуємо підтримку після запуску.
Safety Data Sheet (SDS) — обов'язковий документ для багатьох категорій: хімічні речовини, лаки, фарби, миючі засоби, промислові гази. В інтернет-магазині на Бітрікс документ повинен бути доступний покупцю до покупки — це означає PDF у картці товару з версійним контролем та можливістю завантаження.
Чому потрібна автоматизація паспортів безпеки?
Типові складнощі:
- Ручне завантаження кожного файлу — до 2 годин на 100 товарів.
- Помилки в іменах файлів: артикул не збігається, паспорт прикріплюється до невірного товару.
- Відсутність версійності: незрозуміло, чи актуальний документ.
- Пошук товарів без SDS вручну через адмінку.
Ми автоматизуємо процес, скорочуючи час завантаження на 80% порівняно з ручним прикріпленням (у 5 разів швидше). Економія на зарплаті менеджера — суттєва, до $500 на місяць.
Як організувати масове завантаження паспортів?
Зберігання документів
Паспорти безпеки зберігаються у файловому сховищі Бітрікс (/upload/) через модуль main. Зв'язок з товаром — через властивість-файл інфоблоку:
Властивість SAFETY_DATA_SHEET (тип F):
- Множинне: ні (один актуальний паспорт)
- Обов'язкове: ні (не у всіх товарів)
- Підказка: «PDF паспорта безпеки (ГОСТ 30333-2007)»
Для версійного контролю — властивість SAFETY_DATA_SHEET_DATE (тип DateTime).
Скрипт масового завантаження з ZIP
Паспорти часто приходять пачкою від постачальника в ZIP-архіві з іменами за артикулом. Наш скрипт обробляє архів за хвилини — у 5 разів швидше за ручне завантаження:
Розгорнути приклад коду скрипта
function importSdsDocuments(string $zipPath, int $iblockId): array
{
$zip = new \ZipArchive();
$zip->open($zipPath);
$results = ['ok' => 0, 'not_found' => [], 'error' => []];
for ($i = 0; $i < $zip->numFiles; $i++) {
$filename = $zip->getNameIndex($i);
if (!str_ends_with(strtolower($filename), '.pdf')) continue;
preg_match('/^([A-Z0-9\-]+)/i', $filename, $matches);
$article = $matches[1] ?? '';
$product = \CIBlockElement::GetList([], [
'IBLOCK_ID' => $iblockId,
'PROPERTY_ARTICLE' => $article,
], false, ['nPageSize' => 1], ['ID', 'NAME'])->GetNext();
if (!$product) {
$results['not_found'][] = $filename;
continue;
}
$tmpPath = sys_get_temp_dir() . '/' . $filename;
file_put_contents($tmpPath, $zip->getFromIndex($i));
$fileId = \CFile::SaveFile([
'name' => $filename,
'tmp_name' => $tmpPath,
'type' => 'application/pdf',
], 'sds_documents');
if ($fileId) {
\CIBlockElement::SetPropertyValuesEx($product['ID'], $iblockId, [
'SAFETY_DATA_SHEET' => $fileId,
'SAFETY_DATA_SHEET_DATE' => date('d.m.Y'),
]);
$results['ok']++;
}
}
$zip->close();
return $results;
}
Скрипт у 5 разів швидший за ручне завантаження: обробляє 100 файлів за 20 хвилин замість 2 годин.
Налаштування завантаження за 4 кроки:
- Створіть властивості
SAFETY_DATA_SHEET і SAFETY_DATA_SHEET_DATE в інфоблоці товарів.
- Розмістіть скрипт
importSdsDocuments в адміністративній частині.
- Додайте в шаблон картки виведення посилання на паспорт.
- Налаштуйте звіт і обробник валідації.
Як перевірити наявність SDS?
Відображення в картці товару
У шаблоні bitrix:catalog.element додаємо блок:
<?php if (!empty($arResult['PROPERTIES']['SAFETY_DATA_SHEET']['VALUE'])): ?>
<?php $sdsFile = \CFile::GetFileArray($arResult['PROPERTIES']['SAFETY_DATA_SHEET']['VALUE']); ?>
<div class="product-sds">
<h4>Документація з безпеки</h4>
<a href="<?= \CFile::GetPath($arResult['PROPERTIES']['SAFETY_DATA_SHEET']['VALUE']) ?>"
download="<?= htmlspecialchars($sdsFile['ORIGINAL_NAME']) ?>"
class="sds-download-btn">
<span class="pdf-icon"></span>
Паспорт безпеки (PDF)
<?php if (!empty($arResult['PROPERTIES']['SAFETY_DATA_SHEET_DATE']['VALUE'])): ?>
<small>версія від <?= $arResult['PROPERTIES']['SAFETY_DATA_SHEET_DATE']['VALUE'] ?></small>
<?php endif; ?>
</a>
<p class="sds-note">Відповідно до <cite>ГОСТ 30333-2007</cite></p>
</div>
<?php endif; ?>
Атрибут download забезпечує завантаження.
Валідація при додаванні товару
Для розділів, де SDS обов'язковий (наприклад, «Хімія», «Лакофарбові матеріали»), використовуємо обробник OnBeforeIBlockElementAdd:
AddEventHandler('iblock', 'OnBeforeIBlockElementAdd', function(&$fields) {
$requiredSdsSections = \Bitrix\Main\Config\Option::get('sds_module', 'required_sections', '');
$requiredSectionIds = array_filter(explode(',', $requiredSdsSections));
if (in_array($fields['IBLOCK_SECTION_ID'], $requiredSectionIds)) {
if (empty($fields['PROPERTY_VALUES']['SAFETY_DATA_SHEET'])) {
$GLOBALS['APPLICATION']->ThrowException(
'Увага: для цього розділу рекомендується прикріпити паспорт безпеки.',
'SDS_MISSING'
);
}
}
});
Звіт по товарах без SDS
Адміністративний звіт (GET /bitrix/admin/sds_report.php) показує список товарів із «хімічних» розділів без прикріпленого паспорта, з кнопкою швидкого завантаження.
SELECT ie.ID, ie.NAME, s.NAME as section_name
FROM b_iblock_element ie
JOIN b_iblock_section s ON s.ID = ie.IBLOCK_SECTION_ID
LEFT JOIN b_iblock_element_property iep
ON iep.IBLOCK_ELEMENT_ID = ie.ID
AND iep.IBLOCK_PROPERTY_ID = (
SELECT ID FROM b_iblock_property
WHERE IBLOCK_ID = ie.IBLOCK_ID AND CODE = 'SAFETY_DATA_SHEET'
)
WHERE ie.IBLOCK_ID = ? AND ie.ACTIVE = 'Y'
AND s.ID IN (/* розділи з обов'язковим SDS */)
AND (iep.VALUE IS NULL OR iep.VALUE = '')
ORDER BY s.NAME, ie.NAME;
Звіт дозволяє за пару кліків виявити всі товари без SDS.
Процес роботи
| Етап |
Що робимо |
| Аналітика |
Вивчаємо каталог, визначаємо розділи з обов'язковим SDS, погоджуємо властивості |
| Проектування |
Схема зберігання, скрипт завантаження, шаблон виведення, звіт |
| Реалізація |
Налаштування інфоблоків, скрипт, шаблон, обробник валідації |
| Тестування |
На тестових даних, виправляємо помилки |
| Деплой |
Перенесення на бойовий сайт, навчання менеджерів |
Що входить у роботу
- Властивості інфоблоку (SAFETY_DATA_SHEET, SAFETY_DATA_SHEET_DATE)
- Скрипт масового завантаження з ZIP з обробкою помилок
- Шаблон відображення в картці
- Звіт по товарах без SDS
- Документація та навчання (1 година)
- Підтримка 1 місяць
Типові помилки та чек-лист
Помилки:
- Неправильне ім'я файлу (артикул не збігається) — скрипт позначає як
not_found.
- Файл перевищує ліміт (>20 МБ) — налаштовуємо обмеження.
- Дата версії не проставлена — автоматично береться поточна.
- Забули прикріпити SDS вручну — валідація попереджає.
Чек-лист перед запуском:
- [ ] Всі артикули в назвах файлів збігаються з товарами
- [ ] Властивості SAFETY_DATA_SHEET і SAFETY_DATA_SHEET_DATE створено
- [ ] Розділи з обов'язковим SDS задано в опціях
- [ ] Шаблон картки виводить посилання на завантаження
- [ ] Звіт працює і показує правильні товари
Строки
| Етап |
Строк |
| Налаштування властивостей інфоблоку |
0.5 дня |
| Скрипт масового завантаження з ZIP |
1 день |
| Шаблон відображення в картці |
1 день |
| Звіт по відсутніх документах |
1 день |
| Тестування та деплой |
0.5 дня |
| Разом |
4 дні |
Замовте налаштування паспортів безпеки під ключ — отримайте готове рішення за 4 дні. Зв'яжіться з нами для консультації та оцінки вашого проекту. Ми гарантуємо якість і підтримку після запуску.
Що робити, якщо сайт на Бітріксі вже зламали?
Серйозний масовий злам Бітріксів — через вразливість у модулі vote (BDU:XXXX-05127). Через неї заливали веб-шели пачками. Причина? Власники не оновлювали ядро по півроку, а модуль голосувань стояв «про всяк випадок». Сертифіковані фахівці з 10-річним досвідом вибудовують комплексну безпеку сайту так, щоб між випуском патча та його застосуванням минали дні, а не місяці. І щоб навіть без патча сайт не ліг від типової атаки.
Ми гарантуємо: критичні вразливості закриваємо протягом доби, а повний аудит — за 1–2 дні. Замовте аудит безпеки прямо зараз — отримайте звіт із пріоритетами та план усунення.
Як налаштувати модуль «Проактивний захист»? (потужний, але не з коробки)
Модуль security встановлений майже на кожному Бітріксі, але правильно налаштований — хіба що на кожному п'ятому. Що конкретно потрібно ввімкнути та підкрутити:
-
WAF (Веб-антивірус) — фільтрує SQL-ін'єкції, XSS, CSRF, path traversal на рівні
OnPageStart. Ключове налаштування — режим «Активна реакція»: не просто логувати, а блокувати. У /bitrix/admin/security_filter.php перевіряємо, що всі типи атак увімкнені, а винятки — мінімальні.
- Контроль активності (
/bitrix/admin/security_iprule.php) — ліміти на кількість запитів з одного IP. За замовчуванням 100 запитів на хвилину. Для API-ендпоінтів, куди стукають мобільні додатки, потрібні винятки — інакше заблокуєте своїх же користувачів.
- 2FA — OTP через Google Authenticator. Вмикається в налаштуваннях користувача. Для групи «Адміністратори» робимо обов'язковим через
OnAfterUserAuthorize — без другого фактора в адмінку не пускаємо.
- Контроль цілісності (
/bitrix/admin/security_file_verifier.php) — хеші системних файлів. Якщо хтось змінив файл у /bitrix/modules/ — система помітить. Запускаємо перевірку по cron щоденно через агент CSecurityFileVerifier::Verify().
- Стоп-лист —
b_security_filter_stoplist. Автоматичне блокування IP при спрацюванні WAF. Ручне додавання підмереж — коли бачимо сканери.
- Журнал безпеки —
b_event_log. Хто, коли та що змінював в адмінці. Зберігання мінімум 90 днів. При розслідуванні інциденту — безцінно.
Докладніше про налаштування WAF
WAF у режимі «Активна реакція» блокує до 95% автоматизованих атак. Але важливо налаштувати винятки для легітимних запитів, наприклад, для завантаження файлів через `\Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getFileList()`. Інакше користувачі не зможуть прикріпити зображення до коментарів. Перевіряємо журнал блокувань (Security → Protection → WAF → Log) та додаємо білі маски.
Що включає аудит безпеки сайту Бітрікс?
Серверний рівень — тут найчастіше і діри:
-
phpinfo() доступний по /info.php або /phpinfo.php — зустрічається на кожному третьому проєкті. Атакуючий отримує версію PHP, шляхи, модулі, конфігурацію. Видаляємо.
-
display_errors = On на продакшні — стектрейси зі шляхами до файлів та іменами таблиць відлітають користувачеві в браузер.
- PHP-функції
exec, system, passthru, proc_open не відключені в php.ini. Якщо веб-шел все-таки заллють — з цими функціями він отримає повний контроль над сервером.
- Версія PHP < 8.1 — без security-апдейтів. PHP 7.4 більше не підтримується, але досі живе на чверті проєктів.
Рівень додатку:
- Застарілі модулі:
vote, forum, blog — часто стоять невикористовувані, але з активними обробниками. Деактивуємо та видаляємо.
- Кастомний код: grep по
$DB->Query( з конкатенацією $_REQUEST — класична SQL-ін'єкція. Мають бути $DB->ForSql() або D7 ORM.
- Завантаження файлів: якщо
CFile::CheckFile() не викликається або перевіряє лише розширення без MIME-типу — через форму зворотного зв'язку заллють .php файл.
-
dbconn.php та .env — мають бути закриті правилами веб-сервера. Перевіряємо: curl https://site.ru/bitrix/.settings.php не повинен віддавати нічого, окрім 403.
SSL/TLS:
- Перевірка через SSL Labs — рейтинг A або вище.
- HSTS з
max-age від 31536000 (рік).
- Редирект HTTP -> HTTPS на рівні Nginx, не на рівні Бітрікс.
Результат аудиту — звіт із пріоритетами: Critical / High / Medium / Low. Критичні закриваємо в перший день. Замовте аудит — оцінимо ваш проєкт за 1-2 дні.
Лікування зламаних сайтів — протокол дій
Сайт уже скомпрометований — SEO-спам, редиректи на казино, веб-шел в /upload/. Порядок дій:
- Ізоляція — знімаємо сайт, ставимо заглушку. Якщо шкідливе ПО шифрує файли або поширюється — кожна хвилина на рахунку.
- Визначення вектора — логи доступу (
access.log), логи помилок, b_event_log. Шукаємо POST-запити до нетипових файлів, звернення до /upload/*.php, підозрілі user-agent.
- Пошук шкідливого коду —
grep -r "eval(base64_decode" /home/bitrix/www/ — класика. Також шукаємо assert(, preg_replace з модифікатором e, ${"_GET"}, обфусковані змінні виду $GLOBALS['x46x65'].
- Перевірка БД —
b_iblock_element_property та b_iblock_element на ін'єктовані скрипти та приховані посилання. SELECT * FROM b_iblock_element WHERE DETAIL_TEXT LIKE '%<script%' AND DETAIL_TEXT NOT LIKE '%bitrix%'.
- Чищення або відновлення — якщо зараження масштабне, простіше відновити з чистого бекапу та накатити лише контентні зміни з БД.
- Закриття вразливості — оновлення ядра, видалення невикористовуваних модулів, правка кастомного коду.
- Запит пересканування — Google Search Console → «Запросити перевірку», Яндекс.Вебмастер → «Я все виправив».
Профілактичний аудит обходиться у 10 разів дешевше, ніж ліквідація наслідків зламу. Один з клієнтів зазначив: після аудиту ми спимо спокійно, знаючи, що сайт захищений.
Як захистити сайт на Бітріксі від DDoS?
- Cloudflare / DDoS-Guard / Qrator — проксіювання трафіку. L3/L4 атаки фільтруються на їхньому боці. L7 — через правила та challenge-сторінки. Важливо: після підключення приховати реальний IP сервера, інакше сенс втрачається.
- Rate limiting на Nginx:
limit_req_zone для /bitrix/admin/, /api/, форм. Окремі ліміти для авторизованих та анонімних користувачів.
- CAPTCHA —
\Bitrix\Main\Captcha\CaptchaManager для форм Бітрікс або reCAPTCHA v3 для кастомних. v3 не дратує користувачів — працює у фоні.
- Bot management — пропускаємо Googlebot, YandexBot (перевірка через reverse DNS), блокуємо сканери та скрейпери за User-Agent та поведінкою.
Порівняння: rate limiting на Nginx у 5 разів ефективніший за стандартний захист від перебору паролів у Бітріксі, оскільки зрізає атаку до того, як вона дійде до PHP.
Резервне копіювання — останній рубіж
- Щоденні бекапи: файли через rsync + дамп PostgreSQL/MySQL через
pg_dump/mysqldump.
- Зберігання в ізольованому S3-сумісному сховищі. Ключове слово — ізольованому. Якщо бекапи лежать на тому ж сервері, що й сайт, зломщик видалить і їх.
- Ротація: daily × 7, weekly × 4, monthly × 12.
- Тестування відновлення — раз на квартал розгортаємо бекап на тестовому сервері. Бекап, з якого неможливо відновитися, — просто файл на диску. Ми гарантуємо відновлюваність кожного бекапу.
- Моніторинг: якщо бекап не пройшов — алерт у Telegram протягом години.
Моніторинг — виявити до того, як зателефонує клієнт
- Uptime — перевірка кожні 60 секунд через UptimeRobot / Zabbix / кастомний скрипт. Алерт у Telegram + дзвінок при даунтаймі > 5 хвилин.
- Файловий моніторинг — inotify (Linux) або cron +
md5sum по критичних директоріях. Новий .php у /upload/? Алерт негайно.
- Сканування на малварь — AI-BOLIT або ClamAV за розкладом. Перевірка і файлів, і бази.
- SSL-сертифікат — попередження за 30/14/7 днів до закінчення. Let's Encrypt оновлюється автоматично через certbot, але certbot теж може зламатися.
- Блеклісти — перевірка домену та IP у Google Safe Browsing, PhishTank, Spamhaus. Потрапляння = втрата трафіку.
Чому важливий захист персональних даних?
- HTTPS everywhere — редирект на рівні Nginx.
- Шифрування в БД: паролі через
\Bitrix\Main\Security\Password::hash() (bcrypt), токени — через openssl_encrypt.
- Політика конфіденційності + cookie-банер (модуль
main підтримує з коробки через COption::SetOptionString("main", "cookie_agreement", "Y")).
- Журналювання доступу до ПД — хто та коли переглядав дані клієнтів.
Що входить у роботу (deliverables)
| Компонент |
Склад |
| Аудит безпеки |
Звіт з критичними/високими/середніми/низькими вразливостями, рекомендації щодо усунення |
| Усунення вразливостей |
Пропатчений проєкт, оновлені модулі, налаштований WAF, 2FA, SSL |
| Лікування зламу |
clean-версія файлів, відновлена БД, закритий вектор, звіт для пошуковиків |
| Моніторинг |
Доступ до системи алертів, щомісячний звіт, виділений інженер (на абоненті) |
| Документація |
Схема інфраструктури, карта вразливостей, інструкція з відновлення |
| Навчання |
Воркшоп для адміністраторів: як реагувати на інциденти |
| Підтримка |
Фіксований SLA, час реакції — від 1 години |
Строки
| Послуга |
Строки |
Результат |
| Експрес-аудит |
1-2 дні |
Критичні вразливості + план |
| Повний аудит |
3-5 днів |
Детальний звіт, OWASP Top 10 |
| Усунення вразливостей |
1-2 тижні |
Пропатчений проєкт |
| Лікування зламу |
1-3 дні |
Чистий сайт + закритий вектор |
| Моніторинг (абонент) |
Безперервно |
Алерти + щомісячний звіт |
Працюємо разово та на абоненті з фіксованим SLA. Для абонентських клієнтів — виділений інженер, який знає проєкт. Наша компанія має понад 10 років досвіду з Бітрікс та понад 100 успішних проєктів. Зв'яжіться з нами — оцінимо ризики та складемо кошторис за 1-2 дні.
Чек-лист: 15 пунктів, які перевіряємо на кожному проєкті
- Ядро 1С-Бітрікс та модулі — актуальна версія, невикористовувані модулі видалені.
- Модуль
security активний, WAF у режимі «Активна реакція».
- 2FA увімкнена для всіх обліковок з доступом до адмінки.
-
/bitrix/admin/ закритий по IP або за додатковою HTTP-авторизацією.
- Політика паролів: від 12 символів, mixed case, цифри, спецсимволи.
- SSL/TLS: рейтинг A+ на SSL Labs, HSTS увімкнений.
- Службові файли (
dbconn.php, .settings.php, .env, бекапи, логи) — 403 з браузера.
- Права: 644 файли, 755 директорії. Веб-сервер не owner системних файлів.
- Security-заголовки:
Content-Security-Policy, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Strict-Transport-Security, Referrer-Policy.
- Контроль цілісності файлів — щоденна перевірка через агент.
- Бекапи: щоденні, ізольоване зберігання, перевірка відновлюваності.
-
b_event_log — зберігання від 90 днів, регулярний перегляд.
- PHP 8.1+,
display_errors = Off, небезпечні функції відключені.
- Моніторинг uptime + алерти при зміні файлів у
/upload/.
- Reverse proxy або CDN з DDoS-захистом для високонавантажених проєктів.
Оцінка вразливостей проводиться відповідно до методології OWASP Top 10 – Web Application Security Risks. Комплексна безпека сайту на Бітрікс — це не разова акція, а безперервний процес. Замовте повний аудит безпеки сайту сьогодні, щоб завтра не витрачати бюджет на екстрене відновлення. Отримайте консультацію — ми відповімо на будь-які запитання.