Как запретить внешним сайтам ссылаться на картинки на вашем сайте?
Если вы хотите запретить другим сайтам встраивать ваши изображения, размещенные на вашем сайте (это называется "горячая ссылка" или "hotlinking"), вы можете использовать несколько методов. Основная цель — предоставить доступ к вашим файлам тем клиентам\пользователям\веб-сайтам, которые посещают ваш сайт напрямую, а не через сторонние ресурсы, либо определенному кругу дружественных ресурсов. Ниже рассмотрим варианты, какие настройки могут быть применены.
Поведение аналогично предыдущему запросы: Если источник запроса недействителен, возвращается ошибка 403.
Пример для Apache:
Пример для Nginx:
Для Apache:
Простой пример
Для Nginx
В конфигурации Nginx (nginx.conf или в server { ... }) добавьте:
Это позволит загружать изображения только с указанного домена. Браузеры будут загружать изображения только если запрос пришел с userman.ru. Если другой сайт попытается встроить ваше изображение через <IMG..>, браузер заблокирует загрузку (если у него включена проверка CORS).
CORS — не идеальная защита от хотлинкинга, но она помогает блокировать встраивание ресурсов в современных браузерах. Лучше комбинировать с .htaccess/nginx правилами, чтобы закрыть обход через прокси или старые браузеры.
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 правилами, чтобы закрыть обход через прокси или старые браузеры.
Похожие статьи:
23 сентябрь 2024, Понедельник
Как запустить нескольких веб сайтов на одном IP и порту на веб сервере IIS
01 октябрь 2024, Вторник
Как на веб сервере сделать редирект с http на https?
25 май 2020, Понедельник
Nginx: Ограничить доступ к каталогам сайта по IP адресам
23 сентябрь 2020, Среда
IE: Ваше подключение не защищено (This site is not secure)
24 январь 2019, Четверг
Как отключить отображение версии Web-сервера в Http-заголовке
Комментарии: