Хотлинк (Hotlink) - вставка прямых ссылок изображений или файлов с одного сайта на другие. Этот прием используется довольно часто, ну например, у вас на сервере не хватает места для хранения картинок и вы пользуетесь каким-либо бесплатным сервисом для хранения файлов изображений, т.е. загружаете картинку, получаете URL и вставляете его на свой сайт. В итоге: вы сохраняете место для вашего сайта и используете пропускную способность хостинга для картинок, но это уже не ваше дело. Но вот как быть, если кто-то решил, что ваш сайт можно использовать как подобный сервис.
Как не стать бесплатным поставщиком изображений и файлов?
Есть ли защита от этого? Да есть! Чтобы запретить другим сайтам пользоваться вашим трафиком и/или просто указывать прямые ссылки на ваши файлы (картинки), то добавьте в ваш .htaccess файл следующие строки:
RewriteCond %{HTTP_REFERER} !^$
# Дальше список разрешенных доменов
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?ваш-сайт.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?вашсайт.ru[NC]
# Форматы файлов, для которых устанавливается защита
RewriteRule .(jpg|jpeg|png|gif)$ - [NC,F,L]
В итоге все остальные сайты получат ошибку 403 Forbidden (т.е. Запрещено) и ваша пропускная способность больше "не работает на других".
Зачем это нужно?
Как уже было сказано это и бережет пропускную способность сайта и защищает ваши изображения от "показа" в другом месте, особенно, если графика находится под Copyright'ом.
Если у вас небольшой сайт или вам просто не важно куда уходят ваши картинки и трафик безлимитный, тогда можете и не защищаться от хотлинка.
Дополнительно
#comment-306
#comment-307
Еще по теме
от Блог EllECTRONC, отправлено 6 Июн 2010, 01:47
Ранее я описывала защиту изображений через .htaccess с использованием модуля mod_rewrite и дирректив RewriteCond и RewriteRule — Защита от прямых ссылок для изображений через .htaccess. Но, как оказалось позже, модуль ImageCache не работает при такой з…
Также может быть полезно…
29 Комментариев [Нет новых]
"… В итоге все остальные сайты получат ошибку 403 Forbidden… и ваша пропускная способность больше “не работает на других”."
Но в итоге она не работает и на вас
Более интересный способ выдавать "легкую" картинку с рекламой вашего сайта.
И еще, защиту надо ставить не по HTTP_REFERER, а по ИП, т.к. HTTP_REFERER подделывается совершенно не сложно.
@sAx: >"выдавать “легкую” картинку с рекламой вашего сайта"
Это вы про водяной знак?
>И еще, защиту надо ставить не по HTTP_REFERER, а по ИП, т.к. HTTP_REFERER подделывается совершенно не сложно.
Вы думаете IP нельзя подделать? Да способ не совершенен, но если он работает - почему бы и нет.
К тому же по IP можно блокировать, когда знаешь IP подсевшего сайта
Нет, не про водяной знак.
Трафика сьедается не много, а польза очевидная. Почти как баннеры только бесплатные.
)
можно вот так: ErrorDocument 403 /errorpic.giferr
errorpic.giferr — небольшая ГИФ-картинка (расширение длжно быть отличным от RewriteRule , чтобы не зациклиться).
Как обработчик 403-й ошибки можно запустить скрипт, который выдаст в хеадер код 200 (ОК) и хекскод картинки нужного вам содержания (любую). При наличии GD на сервере, картинку можно генерить даже "налету". Огромное поле для творчества
Похожим приемом пользуется какой-то имидж-хостинг (не помню как называется… с лягушкой
ИП тоже можно подделать, но эта задача уже другого уровня сложности, доступна гораздо меньшему количеству юзеров.
Теперь понятно о чем вы! Но такая "легкая картинка" выдается при отсутствии на их сервере изображения, на которое ссылается юзер. А если картинка есть, то она и отображается…
Так они 404-ю обработали, а что мешает повесить на 403-ю
Ну тогда можно даже не генерить картинку, а выдать им уже заготовленную, к примеру "Внимание: Картинка стырена!" или просто "Фигу". И послать им это тем же методом, что и ботов
Всяко можно, но интереснее сделать так, чтобы народ с ресурса, на котором выложили стыренную у вас картинку, пошел к вам
Хорошо пишешь аффтар
Очень интересный материал. Спасибо!
Очень полезная вещь, спасибо!!
Супер
@sAx:
>> И еще, защиту надо ставить не по HTTP_REFERER, а по ИП, т.к. HTTP_REFERER подделывается совершенно не сложно.
Либо я не понял о чем Вы либо ВЫ несете чепуху.
От хот линка блокировка по ip никаким образом использоваться не может.
Суть борьбы с хот линком это - отличить откуда пришел запрос - с вашего сайта или с стороннего. Поэтому и используется referer как поле которое по умолчанию содержит адрес откуда пришел запрос.
Вы простите по чьему IP собираетесь контролировать? По IP пользователя?
Лучше бы написали как обходить такую защиту! А то многие сайты установили такую парашу!
Ну-ну. Вот от таких, как вы и защищаются люди. Подумайте.
Спасибо, сделал вместо ошибки левую картинку с просьбой перейти на сайт
@Win32 Жжешь
Forne как ты это сделал? Что-то у меня ниче не получается
Ну, делается это примерно так:
# Дальше список разрешенных доменов
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?ваш-сайт.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?вашсайт.ru[NC]
# Форматы файлов, для которых устанавливается защита и картинка фигу.jpg
RewriteRule \.(jpe?g|gif|bmp|png)$ путь/к/картинке/фигу.jpg [NC,R,L]
Уже сделал, вчера перелопатил мудрый гугл и собрал из множества вариантов самое оптимальное решение:
RewriteCond %{HTTP_REFERER} !^$
# Дальше список разрешенных доменов
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?sitename.ru.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?sitename.ru:80.*$ [NC]
# IP сайта (домена)
RewriteCond %{HTTP_REFERER} !^http(s)?://111.111.111.111.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://111.111.111.111:80.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yandex.ru [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google. [NC]
# RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?домен_дружественного сайта.ru [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
# Форматы файлов, для которых устанавливается защита
# Выводит ошибку 403
# RewriteRule \.(jpe?g|bmp|gif|png|css|mov|swf|dcr|exe|rar|avi|vob|zip|pdf|txt|doc|flv|mp3|mp4)$ - [NC,F,L]
# или показывает спецрисунок вместо указанного
RewriteRule .*\.(jpe?g|bmp|gif|png)$ files/images/nohotlink.jpg [NC,L]
Все проверил - замечательно работает )))))
Кстати, в правиле:
должен стоять слеш между - *. (в комменте он убрался), иначе, без слеша, будут блокироваться любые ссылки, текст которых содержить указанный порядок символов, например такая:
http://example.com/GIFers/text.htmlЕсли правило без слеша, то эта ссылка заблокируется, т.к. содержит в пути порядок символов "gif".
Слэш на месте!
AllStory, вопросик к тебе … вот в этой строчке :
Я так понимаю если не указать зону (ru/com и т.п.) то разрешено будет для любой ?? Я правильно понял ???
Отличная статья и полемика спасибо!
могли бы-вы мне помочь
как прямые ссылки на картинки типа http://example.com/foto_big/3_1.jpg
перенаправлять на страницу http://example.com/shows.php?foto=3_1
буду безмерно признателен.
как-то так:
RewriteRule ^foto_big/([0-9]+_[0-9]+)\.jpg$ /shows.php?foto=$1
Перепробовал уже штук 10 разных вариантов защиты от хотлинков, но никак не получается. И ваш вариант пробовал…все равно картинки на вражеских сайтах благополучно отображаются.
В чем может быть дело. Подскажите пожалуйста! Очень прошу.
Хмм, если вы переходите со своего сайта на "вражеский" или смотрите те же картинки, то для вас они будут видны. Вам нужно почистить кеш браузера и перезагрузить "вражескую страницу". Если они все равно отображаются, то убедитесь что они грузятся с вашего сайта, а не с их. Ну и если, вы все делаете правильно и картинки действительно грузятся с вашего сайта, то пишите в поддержку хостинга и спрашивайте в чем дело с mode_rewrite. Более того посмотрите панель управления вашим хостингом, возможно там уже есть функция Hotlink, так как в большинстве своем, если в панели это есть, то это очень сложно задать вручную.
Понятно, спасибо. Так как рекомендации по очистке кеша и т.д. не помогли, я отписался в техподдержку. Жду от них ответа на вопросы.
PS Если что, у меня свой сервер, то есть все настройки я могу делать сам. Может я могу и сам решить как-то проблему или где-то проверить настройки?
На счет настроек сервера, я вам ничем не помогу, сама не админю сервер, у меня хороший админ сервера. Когда были проблемы с Hotlink и Imagecache, мне предложили другой вариант защиты от Hotlink'а
Да, к такому варианту мы и пришли с моими админами. Так же дело еще в nginx было. В общем проблем много. А самый облом в том что нельзя выдавать картинку-подмену
Какой хостинг используете ?
фишка в том что если на хосте используется nginx
то вся эта шляпа работать не будет !
т.к nginx непонимает файлы .htaccess
p.s и полюбасу необходим mod_rewrite
Что ты об этом думаешь?