Хотлинк

Перейти к навигацииПерейти к поиску

Хотлинк (англ. hotlink) — включение в веб-страницу файлов-изображений или других ресурсов с чужого сервера.

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

Владелец сайта может бороться с этим, проверяя переменную HTTP_REFERER (например, через директивы веб-сервера Apache в модуле mod_rewrite). Если HTTP_REFERER не совпадает с именем своего сервера, то посетителю может выдаваться другое изображение: самый маленький по размеру gif-файл размером 1x1 пиксель, файл с надписью, что данная картинка была украдена с оригинального сервера, и т. п.

Пример запрета хотлинкинга с помощью модуля Apache mod_rewrite

Код добавляется в файл конфигурации веб-сервера (httpd.conf) или в локальный файл конфигурации хоста (.htaccess).

   # Предотвращаем загрузку изображений с хоста www.server.com, 
   # за исключением файла баннера banner.jpg и файла заглушки
   # null.gif  
   # Вместо любого запрошенного изображения вставляем заглушку
   # null.gif размером в несколько килобайт, находящуюся по адресу
   # http://www.server.com/images/null.gif
 
   RewriteCond %{HTTP_REFERER} !^$
   RewriteCond %{HTTP_REFERER} !^http://(.+\.)?server\.ru/ [NC]
   RewriteCond %{REQUEST_URI} !null\.gif$ [NC]
   RewriteRule \.(jpg|jpeg|gif|bmp|png)$ http://server.ru/images/null.gif [L]

Пример запрета хотлинкинга с помощью nginx

Код добавляется в файл конфигурации веб-сервера (nginx.conf) или в его аналог для конкретного домена.

   # Предотвращаем загрузку изображений за исключением файла заглушки badreferer.png  
   # Вместо любого запрошенного изображения вставляем заглушку badreferer.png
   # Для сайтов с реферером server1 и server2 разрешаем хотлинки

   location ~* ^.+\.(jpg|jpeg|gif|png)$ {
     root /path/to/root;
     valid_referers none blocked server_names ~\.server1\. ~\.server2\.;
     if ($invalid_referer) {
       rewrite ^ /badreferer.png last;
     }
   }

   location /badreferer.png {
     root /path/to/badreferer;
   }

См. также

Примечания

Ссылки