Что такое “Хотлинки” (hotlinks) и как с ними бороться
Еще когда этому блогу было от силы пару месяцев и посетителей на нем было не густо я как-то, просматривая логи AwStats, наткнулся на некие “ссылающиеся страницы“, которые меня заинтересовали. Я прошел по ссылкам на эти страницы, чтобы посмотреть, кто же сослался и что хорошего взял с моего блога. Это оказались обычные странички одного ЖЖ. Автор дневника опубликовал у себя поздравление с днем рождения своей подруге, а в качестве картинки для поста указал URL изображения с моего блога. Изображения, которое физически оставалось лежать на моем сервере… И которое каждый раз, когда кто-либо просматривал дневник этого товарища, загружалось с моего сервера и питалось моим трафиком.
О хотлинках (hotlink) я тогда еще не слышал. А именно такой способ публикации медиа-контента, когда постится что-то, (различная графика, флеш-ролики, видео и т.п.) лежащее на другом сервере, называется хотлинком.
Вообще, хотлинк - это наглость! Кто-то, кто берет изображения с Вашего сайта и постит их где-то на форумах, блогах и т.д. по сути своей превращает Ваш сайт в такой себе халявный хостинг картинок. Эти картинки загружаются посетителями сторонних ресурсов, нагружая (согласен, может и не сильно) Ваш сервер, поедая Ваш трафик… И все это от лени (либо от непонимания). Ведь ничего не мешает сохранить понравившуюся картинку на свой компьютер, а потом залить ее на какой-то специально созданный для этого хостинг вроде …
Тогда я попросту взял и переименовал файл на своем сервере. Положил вместо него с таким же названием фейковую картинку с приглашением посетить 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 изображения можно также подложить что угодно.
Если Вы хотите разрешить получение изображений с Вашего сайта браузерам с пустым полем HTTP_REFERER, раскомментируйте строчку:
#RewriteCond %{HTTP_REFERER} !^$
Ничего сложно, как видите, зато как же эффективно.
Сам, честно говоря, удивился, пройдя вновь по тем страницам, на которых выложены изображения с моего блога. Сделал напамять (см. ниже) скриншот сайта frееbsdblоg.ru, где “автор” блога передирает в него статьи по FreeBSD с других сайтов без ссылок на первоначальный источник, вплоть до сохранения HTML разметки, и… картинок. С моего блога там тоже много статей. Скриншот того, как теперь выглядит публикация, которую товарищ передрал из моего блога, не потрудившись даже вычистить ее как минимум от смайликов:
Теперь о тонкостях
В 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 картинку можно положить в корень сайта, либо в папку с темой. Кстати, возможно кому-то пригодится , который мне попался на глаза в Гугле и который всего лишь добавляет в .htaccess правила в зависимости от тех настроек, что Вы ему укажите в админке. Он по-умолчанию предлагает защитить директорию /wp-content/uploads, а антиhotlink изображение предлагает разместить в папке /wp-content/themes/имя_вашей_темы/
Мне использование плагина для добавления правил в .htaccess показалось излишеством. Потому я его не стал ставить. Но судя по отзывам он с успехом исполняет свои обязанности. Возможно, Вам также пригодится автоматический для защиты от хотлинков.
Защищайтесь от хотлинков, господа блогеры. Удачи!
P.S.: Надеюсь, статистика AwStats за апрель будет почище, чем за март…
ПРОДОЛЖЕНИЕ СЛЕДУЕТ
Похожие публикации
Теги: .htaccess, apache, hotlink, rewrite, Wordpress, защита, хотлинк



Ооо! Большой человек однако почтил своим вниманием этот скромный блог …

Снимаю шляпу, господин Хостмастер.
Ниче, правда, не понял из Вашего комментария - с учетом того, что я уже давно разрешил пустых рефереров, потому сейчас стукну в аську.
> если хоть один человек пожалуется на то что в ридерах вместо картинок Бог знает шо, то разрешу пустой реферер
Жалуюсь
Не возможно читать не только в ридере, но и даже когда на блог захожу - частенько наблюдаю эту картинку…
Насчет ридеров я думал и надумал так: если хоть один человек пожалуется на то что в ридерах вместо картинок Бог знает шо, то разрешу пустой реферер. Ну вот, Netspider, ты пожаловался я разрешил.
Хотя, мне вот приходит RSS на Email от Feedburner. Там все в порядке с картинками.
Много перечислять прийдется. Лучше уж обозначить разрешенные рефереры.
Хаваются, но как непонятные теги. Чтобы отправить в эту форму угловые скобки, чтобы они отобразились потом, нужно юзать html коды.
< -<, > - >
Мне больше нравится другой метод:
Закрыть от всех, открыть для 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 =(
Фигово запрещать без “рефа”. Пытался читать эту статейку в RSS-ридере, так вместо картинок - ну ты понял =)