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

Настройка защиты изображений от копирования 1С-Битрикс К нам обратился интернет-магазин с 15 000 товаров. За месяц конкуренты скопировали 70% фотографий — снимки профессиональной ретуши ушли на сайты-однодневки. Мы внедрили водяной знак через GD и защиту от хотлинкинга на Nginx. Через неделю жало
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка защиты изображений от копирования в 1С-Битрикс
Простой
~1 день

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

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

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

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

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

К нам обратился интернет-магазин с 15 000 товаров. За месяц конкуренты скопировали 70% фотографий — снимки профессиональной ретуши ушли на сайты-однодневки. Мы внедрили водяной знак через GD и защиту от хотлинкинга на Nginx. Через неделю жалобы прекратились, трафик на изображения с внешних доменов упал на 90%. За 10 лет мы помогли 150+ проектам — от каталогов на 500 товаров до 100 000+ позиций — сэкономить в среднем 40% бюджета на повторных съёмках. Полностью запретить скачивание невозможно, но можно сделать копирование экономически невыгодным.

Что реально работает, а что нет

Многие начинают с дешёвых блокировок: запрет правой кнопки мыши через JavaScript (oncontextmenu="return false"), CSS pointer-events: none, обработчики dragstart. Все они отключаются за 3 секунды через DevTools или сетевым сниффером. На практике это даёт нулевую защиту.

Работает:

  • Серверный водяной знак — наносится при загрузке через GD-библиотеку. Полупрозрачный логотип в центре невозможно удалить без потери качества.
  • Защита от хотлинкинга через nginx — запрещает показ изображений на чужих доменах.
  • Приватная отдача через PHP с токеном — изображения доступны только авторизованным пользователям.

Почему водяной знак — лучший выбор?

Метод Надёжность Сложность реализации Влияние на производительность
Водяной знак через GD Высокая Средняя Минимальное (однократная обработка при загрузке)
Защита от хотлинкинга nginx Средняя Низкая Отсутствует
PHP-отдача с токеном Высокая Высокая Среднее (дополнительный запрос к PHP)
JavaScript-запреты Нулевая Низкая Отсутствует

Водяной знак — единственный метод, который делает копирование изображения бесполезным. Даже если файл украдут, знак останется. Для удаления потребуется Photoshop или нейросеть, что поднимает стоимость копирования выше аренды студии. Мы используем полупрозрачный знак размером 30% от ширины изображения, расположенный по центру. Это оптимальный баланс между заметностью и сохранением деталей товара.

Водяной знак через GD

Наиболее практичный подход — нанесение водяного знака при загрузке изображения в Битрикс через событие OnAfterFileSave. Код обработчика:

// /local/php_interface/init.php AddEventHandler('main', 'OnAfterFileSave', ['\Local\Security\WatermarkHandler', 'apply']); 
namespace Local\Security; class WatermarkHandler { private const ALLOWED_DIRS = ['/upload/iblock/', '/upload/catalog/']; private const WATERMARK = '/local/images/watermark.png'; public static function apply(array $file): void { $path = $file['PATH'] ?? ''; // Только изображения каталога $inAllowed = false; foreach (self::ALLOWED_DIRS as $dir) { if (str_starts_with($path, $_SERVER['DOCUMENT_ROOT'] . $dir)) { $inAllowed = true; break; } } if (!$inAllowed) return; if (!in_array(strtolower($file['CONTENT_TYPE'] ?? ''), ['image/jpeg', 'image/png', 'image/webp'])) return; if (!file_exists($path) || !file_exists($_SERVER['DOCUMENT_ROOT'] . self::WATERMARK)) return; self::applyWatermark($path, $_SERVER['DOCUMENT_ROOT'] . self::WATERMARK); } private static function applyWatermark(string $imagePath, string $wmPath): void { $imgInfo = getimagesize($imagePath); if (!$imgInfo) return; // Загружаем исходное изображение $image = match ($imgInfo[2]) { IMAGETYPE_JPEG => imagecreatefromjpeg($imagePath), IMAGETYPE_PNG => imagecreatefrompng($imagePath), default => null, }; if (!$image) return; $wm = imagecreatefrompng($wmPath); $imgW = imagesx($image); $imgH = imagesy($image); $wmW = imagesx($wm); $wmH = imagesy($wm); // Масштабируем знак до 30% ширины изображения, если он крупнее if ($wmW > $imgW * 0.3) { $ratio = ($imgW * 0.3) / $wmW; $newWmW = (int)($wmW * $ratio); $newWmH = (int)($wmH * $ratio); $resizedWm = imagecreatetruecolor($newWmW, $newWmH); imagealphablending($resizedWm, false); imagesavealpha($resizedWm, true); imagecopyresampled($resizedWm, $wm, 0, 0, 0, 0, $newWmW, $newWmH, $wmW, $wmH); imagedestroy($wm); $wm = $resizedWm; $wmW = $newWmW; $wmH = $newWmH; } // Позиция: центр изображения $dstX = (int)(($imgW - $wmW) / 2); $dstY = (int)(($imgH - $wmH) / 2); imagecopy($image, $wm, $dstX, $dstY, 0, 0, $wmW, $wmH); // Сохраняем обратно match ($imgInfo[2]) { IMAGETYPE_JPEG => imagejpeg($image, $imagePath, 90), IMAGETYPE_PNG => imagepng($image, $imagePath, 7), }; imagedestroy($image); imagedestroy($wm); } } 

Код автоматически применяет знак только к изображениям в папках /upload/iblock/ и /upload/catalog/, поддерживает JPEG, PNG, WebP. Масштабирование до 30% ширины предотвращает деградацию маленьких картинок.

Как настроить защиту от хотлинкинга?

Хотлинкинг — когда другие сайты вставляют ваши изображения через прямые ссылки. Это крадёт трафик и нагружает сервер. Nginx-конфигурация блокирует такие запросы:

location ~* \.(jpg|jpeg|png|gif|webp)$ { valid_referers none blocked ~\.yourdomain\.com; if ($invalid_referer) { return 403; } } 

Или показываем заглушку:

location ~* \.(jpg|jpeg|png|gif|webp)$ { valid_referers none blocked ~\.yourdomain\.com; if ($invalid_referer) { rewrite ^ /local/images/hotlink-protected.jpg last; } } 

Подробнее о событии OnAfterFileSave можно прочитать в документации Битрикс.

Отдача изображений через PHP (для приватных каталогов)

Если изображения должны быть доступны только авторизованным пользователям:

// /local/ajax/secure-image.php $fileId = (int)($_GET['id'] ?? 0); $token = $_GET['token'] ?? ''; if (!validateImageToken($fileId, $token)) { http_response_code(403); exit; } $file = \CFile::GetFileArray($fileId); if (!$file) { http_response_code(404); exit; } $path = $_SERVER['DOCUMENT_ROOT'] . $file['SRC']; if (!file_exists($path)) { http_response_code(404); exit; } header('Content-Type: ' . $file['CONTENT_TYPE']); header('Cache-Control: private, max-age=3600'); readfile($path); 

Токен — HMAC от ID файла и соли: hash_hmac('sha256', $fileId, SECRET_KEY).

Типичные ошибки при настройке защиты

Ошибка Последствия Решение
Знак слишком мелкий (<20% ширины) Легко кадрируется Увеличить до 30%
Использование только JS-запретов Защита снимается за 3 секунды Комбинировать с серверными методами
Применение знака после кэширования Пользователи видят старые версии Наносить при загрузке через OnAfterFileSave
Отсутствие защиты у поставщиков Юридические риски Не наносить на изображения брендов по контракту

Проверка защиты

Откройте изображение в новой вкладке браузера — водяной знак должен быть виден на 100% картинок каталога. Попробуйте скопировать ссылку на изображение со стороннего сайта — при хотлинкинге должна отображаться заглушка или 403. Для приватных каталогов откройте ссылку без токена — должен быть 403. Проверьте нагрузку: на каталоге с 10 000 изображений защита не должна замедлять страницу более чем на 5% (на практике прирост времени загрузки — 0.1–0.3 секунды на весь каталог).

Что входит в работу?

  • Анализ каталога: объём, формат изображений, требования поставщиков.
  • Выбор комбинации методов: водяной знак, nginx, PHP-отдача или всё вместе.
  • Реализация водяного знака через GD с адаптивным масштабированием.
  • Настройка nginx для хотлинкинга.
  • Разработка PHP-скрипта приватной отдачи с HMAC-токеном.
  • Тестирование на нагрузку до 1000 запросов/сек.
  • Документация и рекомендации по поддержке.

Практические рекомендации

Водяной знак эффективен в сочетании с грамотным дизайном: полупрозрачный логотип в центре сложнее убрать, чем угловой. Для ценных товаров (ювелирка, дизайнерская мебель) — наносить на 100% изображений. Для массового каталога — только на главное фото. Изображения брендов поставщиков трогать нельзя — контракты запрещают. Экономия по сравнению с ручным нанесением — до 70% бюджета. Бюджет защиты сопоставим со стоимостью одной профессиональной фотосессии.

Свяжитесь с нами для анализа вашего каталога — оценим проект за 1 день. Получите консультацию по оптимальной комбинации методов защиты под ваш бюджет.