Как защитить оригинальные изображения, если у Вас битрикс

5k
Алексей,
Как защитить оригинальные изображения, если у Вас битрикс

Даже если нет прямой ссылки и налету добавляется водяной знак часто можно скачать оригинал изображения. Для примера сайт мебели Mr. Doors

Даже если нет прямой ссылки и налету добавляется водяной знак, часто можно скачать оригинал изображения. Для примера сайт мебели Mr. Doors

В каталоге у них размещены изображения в достаточно хорошем качестве (1998 на 1427 пикселей), но с водяным знаком.

Ссылка на данный файл имеет вид: /upload/resize_cache/iblock/2d9/1999_1427_1e7a9a3edf0396df2650852cd55788420/2d9016b8a6f91649cdeff6d6beab944f.jpg

Для того что бы получить оригинал нужно убрать папку /resize_cache/ и папку с указанием размеров "ресайза" /1999_1427_*/. В итоге получим такую ссылку /upload/iblock/2d9/2d9016b8a6f91649cdeff6d6beab944f.jpg, перейдя по которой мы сможем скачать оригинал в разрешении 2000 x 1428 пикселей и без водяного знака.

Как быть?

Самый простой вариант - изменить путь к "обрезанному" изображению (изображению с водяным знаком) так, чтобы не было возможности получить ссылку на оригинал.

Для начала необходимо изменить само название изображения, чтобы оно не было в виде хеша. Тут все просто. Нужно включить seo шаблон в настройках инфоблока.

Далее в процессе "ресайза" можно добавить символическую ссылку на изображение, таким образом изменив путь к файлу. Примерно так:

$fileName1920 = '/images/'.$arResult['DETAIL_PICTURE']['FILE_NAME'];
$file = CFile::ResizeImageGet($arResult['DETAIL_PICTURE'], array('width' => 1920, 'height' => 1080), BX_RESIZE_IMAGE_PROPORTIONAL, true);
if (!is_link($_SERVER['DOCUMENT_ROOT'].$fileName1920)) {
	symlink($_SERVER['DOCUMENT_ROOT'].$file["src"], $_SERVER['DOCUMENT_ROOT'].$fileName1920);
} elseif ($_SERVER['DOCUMENT_ROOT'].$file['src'] != realpath($_SERVER['DOCUMENT_ROOT'].$fileName1920)) {
	unlink($_SERVER['DOCUMENT_ROOT'].$fileName1920);
	symlink($_SERVER['DOCUMENT_ROOT'].$file["src"], $_SERVER['DOCUMENT_ROOT'].$fileName1920);
}
$arResult['DETAIL_PICTURE']['SRC'] = $fileName1920;

В итоге, вместо страшной и "раскрывающей" оригинал ссылки
/upload/resize_cache/iblock/2d9/1999_1427_1e7a9a3edf0396df2650852cd55788420/2d9016b8a6f91649cdeff6d6beab944f.jpg,
получим красивую и безопасную
/images/gostinaya-139.jpg

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 25 сентября 2017 | Обновлено 22 июня 2023
разработчику, делаюИМ, баг
Поделиться
Похожие статьи
Формирование цены от закупочной
Автоматический расчет розничной цены из закупочной. Например наценка 20% c округлением.
Читать дальше » 0
Алексей,
Делаю ИМ, часть 0. Выбор и настройка сервера.
Небольшой цикл статей о том как я делаю интернет-магазин для себя. Начну с настройки web-сервера.
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
1 дек 2022
А как быть с картинками которые уже есть на сайте?
Алексей
1 дек 2022
Алексей, ну вот как раз за счет подмены имени через символьную ссылку можно сделать. В компонентах, где нарезаются картинки и добавляется водяной знак добавить скрипт который будет создавать симлинк. Это всё костыли конечно, но работает.
Даже если нет прямой ссылки и налету добавляется водяной знак часто можно скачать оригинал изображения. Для примера сайт мебели Mr. Doors