Настройка отображения паспортов безопасности товаров в 1С-Битрикс

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

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    944
  • 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 Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1074

При загрузке партии химических товаров паспорта безопасности часто теряются, прикрепляются к неверному товару или имеют неправильные версии. Ручная обработка занимает до 2 часов на 100 позиций, а ошибки в названиях файлов ведут к несоответствию юридическим требованиям. Автоматизация решает задачу: мы настраиваем свойства инфоблоков, пишем скрипт массовой загрузки из ZIP и выводим ссылку на SDS в карточке. Результат — менеджер загружает документы за минуты, покупатель видит актуальную версию. Наш опыт — 5 лет внедрений для магазинов химии, лакокрасочных материалов и промышленного оборудования. Гарантируем поддержку после запуска.

Safety Data Sheet (SDS) — обязательный документ для многих категорий: химические вещества, лаки, краски, чистящие средства, промышленные газы. В интернет-магазине на Битрикс документ должен быть доступен покупателю до покупки — это означает PDF в карточке товара с версионным контролем и возможностью скачивания.

Проблемы, которые решаем

Типичные сложности:

  • Ручная загрузка каждого файла — до 2 часов на 100 товаров.
  • Ошибки в именах файлов: артикул не совпадает, паспорт прикрепляется к неверному товару.
  • Отсутствие версионности: непонятно, актуальный ли документ.
  • Поиск товаров без SDS вручную через админку.

Мы автоматизируем процесс, сокращая время загрузки на 80% по сравнению с ручным прикреплением. Экономия на зарплате менеджера — существенная.

Организация массовой загрузки паспортов

Хранение документов

Паспорта безопасности хранятся в файловом хранилище Битрикс (/upload/) через модуль main. Связь с товаром — через свойство-файл инфоблока:

Свойство SAFETY_DATA_SHEET (тип F):

  • Множественное: нет (один актуальный паспорт)
  • Обязательное: нет (не у всех товаров)
  • Подсказка: «PDF паспорта безопасности (ГОСТ 30333-2007

Для версионного контроля — свойство SAFETY_DATA_SHEET_DATE (тип DateTime).

Скрипт массовой загрузки из ZIP

Паспорта часто приходят пачкой от поставщика в ZIP-архиве с именами по артикулу. Наш скрипт обрабатывает архив за минуты:

Развернуть пример кода скрипта
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 шага:

  1. Создайте свойства SAFETY_DATA_SHEET и SAFETY_DATA_SHEET_DATE в инфоблоке товаров.
  2. Разместите скрипт importSdsDocuments в административной части.
  3. Добавьте в шаблон карточки вывод ссылки на паспорт.
  4. Настройте отчёт и обработчик валидации.

Проверка наличия 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 дня. Свяжитесь с нами для консультации и оценки вашего проекта. Мы гарантируем качество и поддержку после запуска.

Безопасность сайта на 1С-Битрикс: аудит, защита, мониторинг

Последний серьёзный массовый взлом Битриксов — через уязвимость в модуле vote (BDU:2022-05127). Через неё заливали веб-шеллы пачками. Причина? Владельцы не обновляли ядро по полгода, а модуль голосований стоял «на всякий случай». С тех пор мало что изменилось в подходе: Битрикс выпускает патч, а его ставят через три месяца. Мы выстраиваем комплексную безопасность сайта так, чтобы между выходом патча и его применением проходили дни, а не месяцы. И чтобы даже без патча сайт не лёг от типовой атаки.

Закажите аудит безопасности сайта — получите отчёт с приоритетами и план закрытия уязвимостей за 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/. Порядок действий:

  1. Изоляция — снимаем сайт, ставим заглушку. Если вредонос шифрует файлы или распространяется — каждая минута на счету.
  2. Определение вектора — логи доступа (access.log), логи ошибок, b_event_log. Ищем POST-запросы к нетипичным файлам, обращения к /upload/*.php, подозрительные user-agent.
  3. Поиск вредоносного кода — grep -r "eval(base64_decode" /home/bitrix/www/ — классика. Также ищем assert(, preg_replace с модификатором e, ${"_GET"}, обфусцированные переменные вида $GLOBALS['x46x65'].
  4. Проверка БД — b_iblock_element_property и b_iblock_element на инъектированные скрипты и скрытые ссылки. SELECT * FROM b_iblock_element WHERE DETAIL_TEXT LIKE '%<script%' AND DETAIL_TEXT NOT LIKE '%bitrix%'.
  5. Чистка или восстановление — если заражение масштабное, проще восстановить из чистого бэкапа и накатить только контентные изменения из БД.
  6. Закрытие уязвимости — обновление ядра, удаление неиспользуемых модулей, правка кастомного кода.
  7. Запрос пересканирования — Google Search Console → «Запросить проверку», Яндекс.Вебмастер → «Я всё исправил».

Средняя стоимость восстановления после взлома — от 40 000 до 100 000 руб., а профилактический аудит обходится в 2-3 раза дешевле. Вложив 30 000 руб. в аудит, вы можете сэкономить до 200 000 руб. на ликвидации последствий.

Как защитить сайт на Битриксе от 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. Попадание = потеря трафика.

152-ФЗ и персональные данные

  • 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. Для абонентских клиентов — выделенный инженер, который знает проект. Получите консультацию — оценим риски и составим смету за 1-2 дня.

Чек-лист: 15 пунктов, которые проверяем на каждом проекте

  1. Ядро 1С-Битрикс и модули — актуальная версия, неиспользуемые модули удалены.
  2. Модуль security активен, WAF в режиме «Активная реакция».
  3. 2FA включена для всех учёток с доступом к админке.
  4. /bitrix/admin/ закрыт по IP или за дополнительной HTTP-авторизацией.
  5. Политика паролей: от 12 символов, mixed case, цифры, спецсимволы.
  6. SSL/TLS: рейтинг A+ на SSL Labs, HSTS включён.
  7. Служебные файлы (dbconn.php, .settings.php, .env, бэкапы, логи) — 403 из браузера.
  8. Права: 644 файлы, 755 директории. Веб-сервер не owner системных файлов.
  9. Security-заголовки: Content-Security-Policy, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Strict-Transport-Security, Referrer-Policy.
  10. Контроль целостности файлов — ежедневная проверка через агент.
  11. Бэкапы: ежедневные, изолированное хранение, проверка восстановимости.
  12. b_event_log — хранение от 90 дней, регулярный просмотр.
  13. PHP 8.1+, display_errors = Off, опасные функции отключены.
  14. Мониторинг uptime + алерты при изменении файлов в /upload/.
  15. Reverse proxy или CDN с DDoS-защитой для высоконагруженных проектов.

Оценка уязвимостей проводится в соответствии с методологией OWASP Top 10 – Web Application Security Risks (см. Wikipedia). Комплексная безопасность сайта на Битрикс — это не разовая акция, а непрерывный процесс. Закажите полный аудит безопасности сайта сегодня, чтобы завтра не тратить бюджет на экстренное восстановление. Получите консультацию — мы ответим на любые вопросы.