Защита от хотлинка с помощью nginx

Изначально мое отношение к хотлинкингу было никаким. Никак не мог придумать ничего такого, почему бы можно было запретить показывать изображения с оригинального сайта на каком-либо другом. У одного блоггера натолкнулся на параноидальную идею, где он рассказывает, что обнаружил сайт, который был практически неотличимой копией его собственного блога. Автор предположил, что это может навредить ему.

Далее развитие мысли пошло в сторону примера какого-то интернет-магазина. Описывается, что скопировав всю информацию, и что-либо там заменив, можно дискредитировать настоящий сайт или его владельца.

Кроме как дополнительной («лишней») нагрузки на сайт я ничего плохого не вижу. Если у кого-то есть какие-либо примеры «плохих» вариантов использования хотлинкинга — милости прошу в комментарии.

Для того, чтобы все таки защититься от наглецов, которые показывают ваши картинки на своем сайте, можно использовать много различных вариантов. Встречал примеры на .htaccess, на php.  Вот подоспел и вариант защиты от хотлинка с помощью nginx. С помощью директивы location указываем где и какие файлы требуется защитить

location ~ \.(jpe?g|png|gif)$ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return   403;
}
}

Используя «трубу» («|») можно перечислять расширения файлов, которые вы хотите защитить.

Директива valid_referers может содержать список сайтов, которым разрешено брать файлы с вашего сайта. И варианты параметров:

  • none — строка «Referer» в заголовке запроса отсутствует;
  • blocked — строка «Referer» в заголовке запроса присутствует, но её значение удалено файрволлом или прокси-сервером; к таким строкам относятся строки, неначинающиеся на «http://»;
  • server_names — в строке «Referer» в заголовке запроса указано одно из имён сервера;
  • произвольная строка — задаёт имя сервера и необязательное начало URI. В начале или конце имени сервера может быть «*». При проверке порт сервера в строке «Referer» игнорируется.
  • регулярное выражение — в начале должен быть символ «~». Необходимо учитывать, что на совпадение с выражением будет проверяться текст, начинающийся после «http://».

Так же можно запретить вывод всех изображений из определенной директории:

location /images/ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return   403;
}
}

В Википедии можете найти как вариант с .htaccess, так и с nginx, где конструкция усложенена тем, что возвращается не ошибка 403, а картинка, в которой вы можете проявить наглядно свое недовольство по отношению с хотлинкингу.

Другие публикации по теме:

Блокировка доступа к админкам сайтов для nginx и a...  С пятницы по рунету прокатилась волна брутфорса. Довольно большой ботнет подбирал пароли для доступа в административную часть таких движ...

Поделиться информацией с друзьями!

Чтобы не пропустить обновления, подпишись на RSS или почтовую рассылку (свой выбор сделали уже 128 человек!)

4 комментария к «Защита от хотлинка с помощью nginx»

  1. Подскажите, пожалуйста, в каком файле nginx надо прописывать указанную директиву?

  2. Одно время я был любителем «инклудок», когда к минимальному конфигурационном файлу подключались дополнительные.

    Видимо, это привилось у меня с Фидонета и эхопроцессора hpt.

    В основном конфигурационном файле у меня были только основные параметры и подключения остальных файлов — настройки файлэхотоссера, настройки эхотоссера, параметры линков, еще какая-то фигня.

    Так вот, что-то я отвлекся =)

    Сейчас я сторонник все настройки держать в одном конфигурационном файле, как это задумали меинтейнеры или разработчики. Все вышеописанные настройки производятся в nginx.conf

  3. Как узнать используется ли на данном сайте хотлинк или нет. Просто не думаю что много будет «воровать» так картинки.
    И вообще нужно ли хотлинк исползвать, ведь это лишняя ссылка ??? ну или подгрузка изоюражения с сервера на другомй домен, скорее всего Пс это тоже учитывает

Оставить комментарий