Как запретить внешним сайтам ссылаться на картинки на вашем сайте?

05 май 2025, Понедельник
220
0
0 0
Если вы хотите запретить другим сайтам встраивать ваши изображения, размещенные на вашем сайте (это называется "горячая ссылка" или "hotlinking"), вы можете использовать несколько методов. Основная цель — предоставить доступ к вашим файлам тем клиентам\пользователям\веб-сайтам, которые посещают ваш сайт напрямую, а не через сторонние ресурсы, либо определенному кругу дружественных ресурсов. Ниже рассмотрим варианты, какие настройки могут быть применены.

1. Использование файла .htaccess (для серверов Apache)

Если ваш сайт работает на сервере Apache, вы можете добавить правила в файл .htaccess, чтобы блокировать горячие ссылки. Вот пример конфигурации:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?userman\.ru [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC]
Если другой сайт попытается использовать ваши изображения через `<img>` тег, сервер вернет ошибку, и изображение не отобразится, фактически клиенту, который запросил эту картинку будет возвращаться код ошибки 403 (Forbidden) для заблокированных запросов.

2. Настройка Nginx

Если ваш сайт работает на Nginx, вы можете добавить аналогичные правила в конфигурационный файл сервера:
location ~* \.(jpg|jpeg|png|gif|webp)$ {
    valid_referers none blocked userman.ru *.userman.ru;
    if ($invalid_referer) {
        return 403;
    }
}

Поведение аналогично предыдущему запросы: Если источник запроса недействителен, возвращается ошибка 403.

3. Замена изображений на заглушку

Вместо блокировки вы можете заменить изображения на специальную "заглушку", которая будет показываться при горячей ссылке.
Пример для Apache:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?userman\.ru [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpg|jpeg|png|gif|webp)$ /images/no-hotlinking.png [R,L]
где `/images/no-hotlinking.png` — это путь к изображению-заглушке, которое будет отображаться вместо оригинального файла.

Пример для Nginx:
location ~* \.(jpg|jpeg|png|gif|webp)$ {
    valid_referers none blocked userman.ru *.userman.ru;
    if ($invalid_referer) {
        rewrite ^/.*$ /images/no-hotlinking.png break;
    }
}

4. Использование CORS (Cross-Origin Resource Sharing)

Если вы хотите более точно контролировать, кто может загружать ваши изображения, вы можете настроить заголовки CORS на сервере.
 Для Apache:
Простой пример
<FilesMatch "\.(jpg|jpeg|png|gif|webp)$">
    Header set Access-Control-Allow-Origin "https://userman.ru"
</FilesMatch>
более сложный пример для файла .htaccess
<IfModule mod_headers.c>
    # Разрешаем загрузку изображений только с вашего сайта и его поддоменов
    SetEnvIf Origin "^https?://(www\.)?userman\.(com|ru)(:\d+)?$" CORS_ALLOW_ORIGIN=$0
    Header set Access-Control-Allow-Origin "%{CORS_ALLOW_ORIGIN}e" env=CORS_ALLOW_ORIGIN
    Header set Access-Control-Allow-Credentials "true" env=CORS_ALLOW_ORIGIN
    
    # Блокируем загрузку для всех остальных
    <FilesMatch "\.(jpg|jpeg|png|gif|webp|svg|woff2?)$">
        Header set Access-Control-Allow-Origin "https://userman.ru"
        Header set Vary "Origin"
    </FilesMatch>
</IfModule>

Для Nginx
В конфигурации Nginx (nginx.conf или в server { ... }) добавьте:
location ~* \.(jpg|jpeg|png|gif|webp|svg|woff2?)$ {
    # Разрешаем только ваш домен и поддомены
    if ($http_origin ~* "^https?://(www\.)?userman\.(com|ru)$") {
        set $cors "1";
    }

    # Устанавливаем заголовки CORS
    add_header 'Access-Control-Allow-Origin' "$http_origin" always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Vary' 'Origin' always;

    # Если Origin не ваш сайт — блокируем (опционально)
    if ($cors != "1") {
        return 403;
    }
}


Это позволит загружать изображения только с указанного домена. Браузеры будут загружать изображения только если запрос пришел с userman.ru. Если другой сайт попытается встроить ваше изображение через <IMG..>, браузер заблокирует загрузку (если у него включена проверка CORS).
CORS — не идеальная защита от хотлинкинга, но она помогает блокировать встраивание ресурсов в современных браузерах. Лучше комбинировать с .htaccess/nginx правилами, чтобы закрыть обход через прокси или старые браузеры.
Комментарии:
Прокомментировать
При использовании материалов ссылка на сайт UserMan.ru обязательна.
Политика конфиденциальности
Пользовательское соглашение
UserMan.ru © 2017-2025
Соцсети: VK