Защита сайта от Хотлинкинга (Hotlinking)

Приветствую Вас, гости и подписчики блога 4remind.ru. А знаете ли Вы, что такое Хотлинкинг (Hotlinking) и какой вред или польза от него может быть для вашего вэб-сайта? Если Вы не в курсе этого, то предлагаю Вам вкратце ознакомиться с понятием «хотлинкинга» и методами защиты от него.

Защита от Хотлинкинга (Hotlinking)

Итак, под понятием Хотлинкинг (Hotlinking) как правило подразумевается включение на веб-страницы стороннего ресурса файлов изображений, которые находятся на вашем сайте. Как думаете, это хорошо или плохо?

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

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

Итак, вот пример защиты сайта от хотлинкинга при помощи .htaccess и mod_rewrite (модуля сервера Apache):

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?vashsait\.org [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpeg|jpg|gif|bmp|png)$ - [F]

В приведенном примере Вам нужно заменить «vashsait\.org» на доменное имя своего сайта. Защита от хотлинкинга будет действовать в отношении файлов изображений с расширениями jpeg, jpg, gif, bmp, png.

При необходимости Вы конечно же можете добавить (или убрать) другие расширения, и не только для изображений, подставив их в строку №4, разделяя указанные там расширения символом вертикальной черты «|».

Однако, в связи с тем, что при использовании выше приведенного примера, при попытке хотлинкинга будет выдаваться ошибка 403 (403 Forbidden - доступ запрещен), то лучше применять немного другой подход, точнее чуть измененную логику, а именно, вместо «403-го» ответа позволить показывать изображение-заглушку, которой может служить либо конкретный графический файл минимального размера, например 1х1 пикселей, либо файл-изображение, которое будет гласить о том, что была попытка без разрешения «увести» картинку. Вот пример, в котором применяется использование файла-заглушки «zaglushka.gif»:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?vashsait\.org [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpeg|jpg|gif|bmp|png)$ http://www\.vashsait\.org/images/zaglushka\.gif [L]

Вот еще пример, где реализована блокировка использования хотлинкинга только для двух конкретных серверов: livejournal.com и blogspot.com:

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?livejournal\.com/ [NC,OR]
RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?blogspot\.com/ [NC]
RewriteRule .*\.(jpeg|jpg|gif|bmp|png)$ http://www\.vashsait\.org/images/zaglushka\.gif [L]

Если же на вашем хостинге используется веб-сервер Nginx и к его конфигурации (файл nginx.conf) у Вас есть доступ, то можно воспользоваться следующим специальным скриптом, который будет блокировать все хотлинки:

location ~* ^.+\.(jpeg|jpg|gif|bmp|png)$ {
   root /your/path/to/root;
   rewrite ^ /zaglushka.gif last;
}
 
location /zaglushka.gif {
   root /your/path/to/zaglushka;
}

Подсказка:
в примере вместо подстрок «/your/path/to/» Вам нужно будет указывать конкретный путь, который используется непосредственно на вашем ресурсе.

Если же Вы захотите разрешить хотлинкинг (hotlinking) для некоторых сторонних сайтов, то можно немного изменить приведенный выше код и добавить проверку разрешенных сайтов по параметру «реферер», и для веб-сервера Nginx это будет выглядеть так:

location ~* ^.+\.(jpeg|jpg|gif|bmp|png)$ {
   root /your/path/to/root;
   
   valid_referers none blocked server_names ~\.site1\. ~\.site2\. ~\.site3\.;

   if ($invalid_referer) {
      rewrite ^ /zaglushka.gif last;
   }
}
 
location /zaglushka.gif {
   root /your/path/to/zaglushka;
}

Таким образом при помощи этого скрипта, добавленного в файл nginx.conf, будет разрешен хотлинкинг только для сайтов с реферером site1, site2 и site3.

Подсказка:
- Разрешенные «рефереры» перечисляются в строке:
valid_referers none blocked server_names ...
- Проверка «реферера» на предмет попадания его в список разрешенных осуществляется в условии:
if ($invalid_referer) { ... }

Вот пожалуй и все основные премудрости защиты от Хотлинкинга.
Удачи Вам в борьбе с нежелательными элементами!

Метки: , , ,
Другие статьи похожей тематики:

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

14 комментариев к “Защита сайта от Хотлинкинга (Hotlinking)”

  1. Вит:

    Не совсем уверен, что для файлов с расширением JPG, PNG.. (в верхнем регистре) будет нормально работать
    RewriteRule .*\.(jpeg|jpg|gif|bmp|png)$ http ://www\.vashsait\.org/images/zaglushka\.gif [L]

    но в целом скрипт интересный. Спасибо

    Ответить
    • Вит,
      чтобы не сомневаться, можно просто добавить к директиве флаг «NC» (nocase):

      RewriteRule .*\.(jpeg|JPG|gif|bmp|PNG)$ http: //www\.vashsait\.org/images/zaglushka\.gif [NC,L]

      Тогда в директиве будет игнорироваться регистр символов.

      Ответить
  2. artis72:

    Смежный вопрос новичка — а водяные знаки от воровства картинок уже не помогают?

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

      Ответить
      • rza2008:

        Согласен, нагрузка на хостинг огромная. Как то ловил такой косяк. Пришлось в ручную перезалить картинки и сменить им адреса

        Ответить
  3. Андрей:

    я что то не понял. А разве картинка поставленная с вашего сайта не дает вам ссылки.

    Ответить
    • Если Вы имеете обратную (бэклинк) ссылку на сайт, то нет, по сути не дает, а дает только на саму картинку, но не на страницу сайта. Другими словами, обычный робот ПС не переходит на ваш сайт по ссылке на изображение. Но для продвижения самих изображений (для поиска по изображениям) польза небольшая есть, но только доля этой пользы будет ничтожна по сравнению с вредом, если с вашего сайта картинки будут очень часто загружаться на сторонние ресурсы.

      Ответить
  4. Евдокимов:

    Нужная штука, но в код лезть самому стремно.

    Ответить
  5. Татьяна Чиронова:

    Спасибо, а то ведущие свои дневники на Ливинтернете любят пользоваться чужими скриншотами. Я уже однажды меняла картинки, но не будешь же это делать постоянно.
    А почему у Вас не стоит такой код? Я скопировала и поставила на блог Вашу картинку по ссылке.

    Ответить
    • Татьяна, а с чего Вы взяли, что у меня не стоит такой код?

      «Я скопировала и поставила на блог Вашу картинку по ссылке.» — а теперь почистите кэш браузера и перезагрузите ту страницу и посмотрите, что получится :)

      Картинка у Вас видимо появилась в кэше браузера еще до того, как была опубликована эта статья и до того, как я поставил код, т.е. если Вы раньше посещали мой блог, и эта картинка будет видна только Вам, но не новым посетителям вашего сайта.

      Ответить
  6. Teresa:

    Такс… Что-то я совсем тут запуталась :( А как это узнают? Нагружены картинки или нет? Интересно, а на видео это распространяется? Я совсем чайник :(

    Ответить
    • Обычно это проявляется в чрезмерно большом трафике с вашего сайта.
      На видео это тоже может распространяться, если конечно сами видео-файлы находятся на вашем же сервере. Защита такая же — добавить соответствующие расширения файлов в директиве RewriteRule, например: RewriteRule .*\.(swf|avi)$ — [F]

      Ответить
  7. Teresa:

    А где смотреть трафик с моего сайта? Я недавно его создала.
    И столько, оказывается, надо знать…

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

      Ответить

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

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

="4remind.ru