Что такое хотлинкинг и сколько он стоит
У каждого изображения на вашем сайте есть URL, и ничто в HTML не мешает другому сайту вставить этот URL в собственный тег img. Когда он это делает, каждый посетитель его страницы скачивает файл с вашей инфраструктуры: контент — им, трафик — вам, счёт за CDN — тоже вам. То же касается PDF, шрифтов, видеофайлов — всего, что доступно по адресу.
Коварство — в профиле затрат. Одно встраивание не стоит ничего заметного; популярный пост на форуме, вирусная страница агрегатора или собранный скрейпером сайт с сотнями ваших изображений не объявляют о себе — они просто проявляются как трафик, который вы не можете сопоставить с собственными страницами. Если аналитика показывает значимый объём запросов к медиа с чужими реферерами, вы финансируете чужой сайт.
Как работает защита по Referer
Браузеры прикладывают заголовок Referer к подзапросам: когда страница загружает изображение, запрос несёт адрес этой страницы. Защита от хотлинка читает его на edge и применяет простую политику: если запрашивающая страница принадлежит вашим доменам (или партнёрам, которых вы разрешили) — отдать; если чему-то другому — отказать.
Отказ происходит на edge, прежде чем ваш origin вообще что-то увидит, поэтому украденный трафик прекращается немедленно. Некоторые сайты вместо прямого отказа отдают маленькую заглушку «изображение размещено на…», превращая кражу в бесплатную рекламу — приём симпатичный, но обычный отказ остаётся стандартом и более простым вариантом по умолчанию.
Честные пределы: от чего это не защищает
Referer присылает клиент. Скрипт может его подделать, расширение приватности — вырезать, а часть легитимных контекстов не отправляет его вовсе. Поэтому будьте точны в том, что такое защита от хотлинка: это контроль затрат, который останавливает подавляюще частый случай — бытовое встраивание другими сайтами, — а не механизм контроля доступа.
Отсюда два следствия. Во-первых, решите, что делать с ПУСТЫМ реферером: заблокируете — сломаете посетителей со строгими инструментами приватности, открытие ссылки напрямую и часть RSS-ридеров; разрешите — настойчивый скрейпер проскользнёт, просто не отправив ничего. Большинство сайтов разрешают пустой реферер и принимают этот зазор. Во-вторых, всё по-настоящему приватное — платные загрузки, документы пользователей — требует настоящей аутентификации или подписанных URL с истечением срока: это другая функция, решающая другую задачу.
Как включить, не сломав легитимные сценарии
Типичный провал защиты от хотлинка — избыточная блокировка: картинки вашей рассылки в почтовых клиентах, ваши страницы в read-later-приложениях, партнёрский сайт, которому вы как раз хотите разрешить встраивание. Поэтому задавайте область действия осознанно.
На cdn.com.tr контроль живёт на правиле доставки: whitelist или blacklist хотлинка на каждое правило, в панели рядом с настройками кеша и безопасности того же правила. В этом и смысл такого размещения: примените его к правилу, покрывающему пути с медиа, перечислите собственные домены (включая www и поддомены, которые легитимно встраивают контент), добавьте партнёров по необходимости — и не трогайте правило для HTML. Затем, прежде чем закрыть вкладку, проверьте три случая: ваша собственная страница по-прежнему отображает свои изображения, чужой реферер получает отказ, а прямое открытие в новой вкладке ведёт себя так, как вы решили для пустого реферера.
Проверьте все три случая через curl
# your own page as referer — must serve
curl -s -o /dev/null -w '%{http_code}\n' -e 'https://www.example.com/page' https://cdn.example.com/img/product.jpg
# foreign referer — must be refused
curl -s -o /dev/null -w '%{http_code}\n' -e 'https://other-site.com/thread' https://cdn.example.com/img/product.jpg
# no referer — whichever you chose, verify it is deliberate
curl -s -o /dev/null -w '%{http_code}\n' https://cdn.example.com/img/product.jpg
Часто задаваемые вопросы
Сломает ли защита от хотлинка Google Картинки?
Может — если вы блокируете пустые реферера и реферера поисковиков, а присутствие в поиске по картинкам обычно приносит нужный вам трафик. Разрешайте реферера поисковых систем (и, как правило, пустые), если у вас нет конкретной причины поступить иначе.
Помешает ли это скачивать и перезаливать мои изображения?
Нет. Защита от хотлинка не даёт вашей ИНФРАСТРУКТУРЕ обслуживать чужую аудиторию; копирование она остановить не может. Защита от копирования — вопрос юридический и вопрос водяных знаков, а не трафика.
Защищать всё или только медиа?
Только медиа — через правило, покрывающее эти пути. Защищать HTML бессмысленно (страницы — это то, что вы хотите, чтобы посещали), а привязка к правилу — ровно то, что не даёт контролю сломать обычный просмотр сайта.
А как быть с платными или приватными файлами?
Это не про данную функцию. Проверка Referer отпугивает бытовое встраивание; для контента с реальной ценностью используйте аутентификацию или подписанные URL с истечением срока — чтобы одного знания ссылки было недостаточно.