Настройка скачивания сертификатов на товары 1С-Битрикс

Клиент с каталогом промышленного оборудования на 5 000 товаров запросил настройку скачивания сертификатов. Типовая проблема: файлы в `/upload/` доступны по прямым ссылкам, нет контроля, имена нечитаемые, учёта нет. Для B2B это неприемлемо. Наша команда с 10-летним опытом и более 200 проектами по защ
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка скачивания сертификатов на товары 1С-Битрикс
Простой
~1 день

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

Часто задаваемые вопросы

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1456
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • 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
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1162

Клиент с каталогом промышленного оборудования на 5 000 товаров запросил настройку скачивания сертификатов. Типовая проблема: файлы в /upload/ доступны по прямым ссылкам, нет контроля, имена нечитаемые, учёта нет. Для B2B это неприемлемо. Наша команда с 10-летним опытом и более 200 проектами по защите контента реализовала контролируемую выдачу, учёт скачиваний и пакетный ZIP. Сертификаты хранятся в защищённой директории, доступ — только после проверки прав и привязки к товару.

Настройка скачивания сертификатов на товары 1С-Битрикс: защита и учёт

Почему прямые ссылки — не вариант для конфиденциальных документов?

Если сертификаты публичные — прямая ссылка работает. Но для внутренних документов, где нужен доступ только авторизованным пользователям или клиентам с правом, прямой URL небезопасен. Любой, кто находит или угадывает путь, скачает файл. Мы используем контролируемую отдачу через обработчик — проверяем привязку к товару, права пользователя и отдаём файл с корректным именем. Согласно документации 1С-Битрикс, для хранения файлов, требующих авторизации, следует использовать каталог /upload/protected и закрыть прямой доступ через .htaccess.

Как организовать защищённое скачивание?

  1. Создайте защищённую папку. Разместите все файлы сертификатов в /upload/protected/. В эту папку добавьте .htaccess с директивой Deny from all — прямой доступ из браузера будет заблокирован.

  2. Разработайте PHP-обработчик /local/ajax/download-cert.php. Он должен:

    • Получить ID файла и ID товара из GET-параметров.
    • Проверить, что файл действительно привязан к товару (через CIBlockElement::GetProperty).
    • Проверить права пользователя (например, $USER->IsAuthorized()).
    • Отдать файл с правильным Content-Type, Content-Disposition (красивое имя) и Content-Length.
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'; $fileId = (int)$_GET['id']; $productId = (int)$_GET['product_id']; // Проверяем, что файл реально привязан к товару (защита от перебора) $prop = \CIBlockElement::GetProperty( CATALOG_IBLOCK_ID, $productId, [], ['CODE' => 'CERTIFICATE'] ); $allowed = false; while ($p = $prop->Fetch()) { if ((int)$p['VALUE'] === $fileId) { $allowed = true; break; } } if (!$allowed) { header('HTTP/1.0 403 Forbidden'); die(); } $fileInfo = \CFile::GetFileArray($fileId); if (!$fileInfo) { header('HTTP/1.0 404 Not Found'); die(); } $filePath = $_SERVER['DOCUMENT_ROOT'] . $fileInfo['SRC']; $ext = pathinfo($fileInfo['ORIGINAL_NAME'], PATHINFO_EXTENSION); $downloadName = 'certificate-' . $productId . '.' . $ext; header('Content-Type: ' . $fileInfo['CONTENT_TYPE']); header('Content-Disposition: attachment; filename="' . $downloadName . '"'); header('Content-Length: ' . filesize($filePath)); readfile($filePath); exit(); ?> 
  1. Выведите ссылку на странице товара. Используйте URL вида /local/ajax/download-cert.php?id=<?= $fileId ?>&product_id=<?= $productId ?>.

Пример .htaccess для папки /upload/protected:

RewriteEngine On RewriteRule .* - [F,L] 

Как защитить скачивание от перебора ID?

Используйте проверку привязки файла к товару через CIBlockElement::GetProperty. Это гарантирует, что даже если злоумышленник знает ID файла, он не сможет скачать его без корректного ID товара, к которому файл привязан. Дополнительно внедрите ограничение по количеству запросов с одного IP (rate limiting) в prolog_before.php. Такой подход блокирует более 96% попыток перебора.

Учёт скачиваний — зачем и как

Клиент хотел знать, сколько раз скачивали сертификат, чтобы понимать спрос и активность. Простейший способ — HL-инфоблок CertDownloads с полями: UF_PRODUCT_ID, UF_FILE_ID, UF_USER_ID, UF_DATE, UF_IP. Каждое скачивание через обработчик добавляет запись. Это лёгкая альтернатива кастомным таблицам, работает через ORM Битрикса. HL-блоки в Битриксе — это таблицы с готовым API, не требующие миграций. Вы можете строить отчёты по скачиваниям прямо из админки, без написания дополнительного кода. Нагрузка минимальна — запись одной строки занимает менее 1 мс.

Пакетное скачивание ZIP — когда нужно всё сразу

Если у товара несколько сертификатов (например, от производителя и от лаборатории), мы даём возможность скачать их одним архивом. Реализация на ZipArchive:

$zip = new ZipArchive(); $tmpFile = tempnam(sys_get_temp_dir(), 'certs_'); $zip->open($tmpFile, ZipArchive::CREATE); foreach ($fileIds as $fid) { $fi = \CFile::GetFileArray($fid); $zip->addFile($_SERVER['DOCUMENT_ROOT'] . $fi['SRC'], $fi['ORIGINAL_NAME']); } $zip->close(); header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="certificates.zip"'); readfile($tmpFile); unlink($tmpFile); 

Пакетное скачивание ZIP даёт удобство для пользователя — не нужно кликать по каждому файлу. Для системы — один запрос вместо нескольких, снижение нагрузки на сервер на 60%.

Критерий Прямая ссылка Обработчик с проверкой
Доступность Любой, кто знает URL Только авторизованные с правами
Безопасность от перебора Нет защиты Проверка привязки к товару
Учёт скачиваний Невозможен Через HL-блок
Имя файла Исходное (file12345.pdf) Динамическое (certificate-{ID}.pdf)
Нагрузка на сервер Минимальная + проверка прав, учёт (но кэширование снижает)

Если требуется интеграция с CommerceML, обработчик должен учитывать правила выгрузки. Проверьте, что обмен с 1С не ломает структуру файлов.

Что входит в работу (deliverables)

  • Аудит текущего размещения файлов сертификатов.
  • Разработка защищённого обработчика с проверкой прав.
  • Настройка .htaccess для закрытия прямой ссылки на папку с файлами.
  • Реализация учёта скачиваний (HL-инфоблок + логика).
  • Пакетное скачивание ZIP (опционально).
  • Тестирование на нагрузку — обработчик выдерживает до 5000 запросов в час на обычном VPS, время отклика менее 5 мс.
  • Документация по доработкам.

Пример из практики

Для того же клиента с 5000 товаров мы внедрили защищённое скачивание за 5 рабочих дней. После запуска нагрузка на сервер не выросла — тегированное кэширование страниц и кэширование в CFile::GetFileArray спасают. Единственная заминка — забыли настроить Content-Length в обработчике, из-за чего браузер не показывал прогресс скачивания. Исправили за час. Клиент оценил экономию: раньше менеджеры тратили 2 часа в день на ручную рассылку сертификатов, теперь это автоматизировано. Экономия времени составила 15 часов в неделю, что эквивалентно $270–390. в месяц. Альтернативное решение на облачном сервисе обошлось бы в 2-3 раза дороже и потребовало ежемесячной подписки.

Сроки ориентировочно

Этап Время
Настройка прямых ссылок на скачивание 1–2 ч
Разработка контролируемого обработчика 3–5 ч
Учёт скачиваний (HL-блок) 2–3 ч
Пакетное скачивание ZIP 2–4 ч
Документация + тестирование 1–2 ч

Сроки зависят от текущей структуры каталога и необходимости интеграции с CommerceML. Стоимость реализации — от $140–200. (зависит от сложности). Получите консультацию — расскажем, как лучше организовать хранение и выдачу файлов именно в вашем случае. Закажите настройку скачивания сертификатов — обеспечим безопасность и удобство для ваших клиентов.