Переход к предыдущей публикации live.:.Daemony.:.org 2009 Daemony сегодня будет пить! :) Переход к следущей публикации

Что такое “Хотлинки” (hotlinks) и как с ними бороться

Вторник, 31 марта, 2009 22:13:54 EEST

Исправления от 21 апреля, 2009 01:07:35

Выделенные сервера дешевле обычного хостинга

Статистика - вещь упрямая! :) Или что такое Хотлинки (hotlinks) и как с ними бороться Еще когда этому блогу было от силы пару месяцев и посетителей на нем было не густо я как-то, просматривая логи AwStats, наткнулся на некие “ссылающиеся страницы“, которые меня заинтересовали. Я прошел по ссылкам на эти страницы, чтобы посмотреть, кто же сослался и что хорошего взял с моего блога. Это оказались обычные странички одного ЖЖ. Автор дневника опубликовал у себя поздравление с днем рождения своей подруге, а в качестве картинки для поста указал URL изображения с моего блога. Изображения, которое физически оставалось лежать на моем сервере… И которое каждый раз, когда кто-либо просматривал дневник этого товарища, загружалось с моего сервера и питалось моим трафиком.

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

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

Тогда я попросту взял и переименовал файл на своем сервере. Положил вместо него с таким же названием фейковую картинку с приглашением посетить live.daemony.org :) С тех пор прошло немало времени.

И вот сегодня я снова залез в статистику AwStats посмотреть список ссылающихся на этот блог сайтов. Список за март месяц перевалил за тысячу. Подавляющее большинство “ссылающихся” по которым я прошелся - это женские и прочие форумы, ЖЖ странички 15-тилетних девочек. Гей один и тот спер одну картинку с котятами и запостил ее на педерастическом голубом форуме. Словом сайты такие, что никак (по тематике) ссылаться на этот не могли и не ссылались. Зато постили изображения, лежащие здесь. Загрузки этих изображений и были обсчитаны AwStats’ом.

Надо было что-то кардинально предпринимать. Ведь не зря в свое время умные люди придумали модуль для Apache mod_rewrite. ;)

Цель: защитить медиа-файлы на сайте (расширения .jpg .jpeg .gif .png .bmp .flv .swf … список можно продолжать) от загрузки браузерами, от которых приходит переменная HTTP_REFERER отличная от http://live.daemony.org/ (и его алиасов). Это может произойти только по одной причине: если медиа-файл загружается на странице стороннего сайта.

Полтора часа на чтение документации по mod_rewrite и вот что имеем. В файл .htaccess следует добавить такие строчки:

RewriteEngine on
#RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?live.daemony.org [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?daemony.org [NC]
RewriteRule .(jpg|jpeg|png|gif|bmp|flv|swf)$ leech/daemony-welcome.png [NC,R,L]

С такими mod_rewrite правилами всем, у кого поле HTTP_REFERER пустое, либо отличается от http://live.daemony.org/, на запрос о получении файлов с указанными расширениями получат файл http://live.daemony.org/leech/daemony-welcome.png. Сами понимаете, что в качестве антиhotlink изображения можно также подложить что угодно. :cool:

Если Вы хотите разрешить получение изображений с Вашего сайта браузерам с пустым полем HTTP_REFERER, раскомментируйте строчку:

#RewriteCond %{HTTP_REFERER} !^$

Ничего сложно, как видите, зато как же эффективно. :lol: Сам, честно говоря, удивился, пройдя вновь по тем страницам, на которых выложены изображения с моего блога. Сделал напамять (см. ниже) скриншот сайта frееbsdblоg.ru, где “автор” блога передирает в него статьи по FreeBSD с других сайтов без ссылок на первоначальный источник, вплоть до сохранения HTML разметки, и… картинок. С моего блога там тоже много статей. Скриншот того, как теперь выглядит публикация, которую товарищ передрал из моего блога, не потрудившись даже вычистить ее как минимум от смайликов: :lol:

Нажмите, чтобы увеличить...

Теперь о тонкостях

В RewriteRule можно указывать как относительный так и абсолютный путь к антиhotlink изображению. Но это изображение не должно находиться в каталоге, который определен как защищенный в RewriteRule. Иначе, при запросе этого изображения браузером, начнется бесконечный цикл перенаправлений, которые Firefox распознает и рубит сразу же на корню прямо сообщая об этих редиректах, а вот Опера и Эксплорер могут долго думать и гадить Вам в логи. В приведенном примере защищены все графические изображения, находящиеся в каталогах и подкаталогах начиная от корня веб-сервера. Файл daemony-welcome.png не лежит в корневом каталоге веб-сервера. Для него определен алиас-каталог leech, который в httpd.conf прописан вот так:

       Alias /leech/ "/www/live.daemony.org/leech/"

       <Directory "/www/live.daemony.org/leech">
           Options Indexes FollowSymlinks MultiViews
           AllowOverride All
           Order deny,allow
           Allow from all
       </Directory>

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

Для Wordpress блога, в котором все изображения обычно лежат в /wp-content/uploads антиhotlink картинку можно положить в корень сайта, либо в папку с темой. Кстати, возможно кому-то пригодится плагин для Wordpress, который мне попался на глаза в Гугле и который всего лишь добавляет в .htaccess правила в зависимости от тех настроек, что Вы ему укажите в админке. Он по-умолчанию предлагает защитить директорию /wp-content/uploads, а антиhotlink изображение предлагает разместить в папке /wp-content/themes/имя_вашей_темы/

Мне использование плагина для добавления правил в .htaccess показалось излишеством. Потому я его не стал ставить. Но судя по отзывам он с успехом исполняет свои обязанности. Возможно, Вам также пригодится автоматический скрипт-генератор htaccess правил для защиты от хотлинков.

Защищайтесь от хотлинков, господа блогеры. Удачи!

P.S.: Надеюсь, статистика AwStats за апрель будет почище, чем за март… ;)

ПРОДОЛЖЕНИЕ СЛЕДУЕТ

Похожие публикации

Комментариев 5

Daemony 2 апреля, 2009 10:36:50 EEST .:. ID #7133 .:.

Жалуюсь ;-) Не возможно читать не только в ридере, но и даже когда на блог захожу - частенько наблюдаю эту картинку…

Ооо! Большой человек однако почтил своим вниманием этот скромный блог … :)
Снимаю шляпу, господин Хостмастер. :cool:
Ниче, правда, не понял из Вашего комментария - с учетом того, что я уже давно разрешил пустых рефереров, потому сейчас стукну в аську.

Fatality 2 апреля, 2009 09:23:52 EEST .:. ID #7132 .:.

> если хоть один человек пожалуется на то что в ридерах вместо картинок Бог знает шо, то разрешу пустой реферер

Жалуюсь ;-)
Не возможно читать не только в ридере, но и даже когда на блог захожу - частенько наблюдаю эту картинку…

Daemony 1 апреля, 2009 06:51:23 EEST .:. ID #7078 .:.

Насчет ридеров я думал и надумал так: если хоть один человек пожалуется на то что в ридерах вместо картинок Бог знает шо, то разрешу пустой реферер. Ну вот, Netspider, ты пожаловался я разрешил. :) Хотя, мне вот приходит RSS на Email от Feedburner. Там все в порядке с картинками.

Закрыть ТОЛЬКО он нескольких прописанных

Много перечислять прийдется. Лучше уж обозначить разрешенные рефереры.

P.S. угловые скобки почему-то не хаваются тегом PRE =(

Хаваются, но как непонятные теги. Чтобы отправить в эту форму угловые скобки, чтобы они отобразились потом, нужно юзать html коды. :) &lt -<, &gt - >

NetSpider 31 марта, 2009 23:03:34 EEST .:. ID #7062 .:.

Мне больше нравится другой метод:

Закрыть от всех, открыть для domain.com и other-domain.net (т.е. добавлять сколько нужно разрешенных)

«FilesMatch “\.(gif|jpe?g|png)$”»
SetEnvIf Referer ^http:// realref=1
SetEnvIf Referer ^http://(www\.)?domain.com goodref=1
SetEnvIf Referer ^http://(www\.)?other-domain.net goodref=1
Order Deny,Allow
Deny from env=realref
Allow from env=goodref
«/FilesMatch»

Закрыть ТОЛЬКО он нескольких прописанных

«FilesMatch “\.(gif|jpe?g|png)$”»
SetEnvIf Referer ^http://(www\.)?evil-domain.com badref=1
SetEnvIf Referer ^http://(\*\.)?bad-domain.net badref=1
Order Deny,Allow
Deny from env=badref
«/FilesMatch»

Если .htaccess ложить не в корень, а в папку с графикой, то лучше/производительнее без FilesMatch

И не нужно гемора с апачем :), главное чтобы был включен mod_rewrite

P.S.
угловые скобки почему-то не хаваются тегом PRE =(

NetSpider 31 марта, 2009 22:48:05 EEST .:. ID #7060 .:.

Фигово запрещать без “рефа”. Пытался читать эту статейку в RSS-ридере, так вместо картинок - ну ты понял =)

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)