→ Защита от прямых ссылок для изображений через .htaccess

Хотлинк (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

Еще по теме

ImageCache и защита от хотлинка через .htaccess

Ранее я описывала защиту изображений через .htaccess с использованием модуля mod_rewrite и дирректив RewriteCond и RewriteRule — Защита от прямых ссылок для изображений через .htaccess. Но, как оказалось позже, модуль ImageCache не работает при такой з…

RSS-материал

29 Комментариев [Нет новых]

Аватар пользователя sAx

"… В итоге все остальные сайты получат ошибку 403 Forbidden… и ваша пропускная способность больше “не работает на других”."

Но в итоге она не работает и на вас Улыбка Более интересный способ выдавать "легкую" картинку с рекламой вашего сайта.
И еще, защиту надо ставить не по HTTP_REFERER, а по ИП, т.к. HTTP_REFERER подделывается совершенно не сложно.

Аватар пользователя EllECTRONC

@sAx: >"выдавать “легкую” картинку с рекламой вашего сайта"
Это вы про водяной знак?
>И еще, защиту надо ставить не по HTTP_REFERER, а по ИП, т.к. HTTP_REFERER подделывается совершенно не сложно.
Вы думаете IP нельзя подделать? Да способ не совершенен, но если он работает - почему бы и нет.
К тому же по IP можно блокировать, когда знаешь IP подсевшего сайта

Аватар пользователя sAx

Нет, не про водяной знак.
можно вот так: ErrorDocument 403 /errorpic.giferr
errorpic.giferr — небольшая ГИФ-картинка (расширение длжно быть отличным от RewriteRule , чтобы не зациклиться).
Как обработчик 403-й ошибки можно запустить скрипт, который выдаст в хеадер код 200 (ОК) и хекскод картинки нужного вам содержания (любую). При наличии GD на сервере, картинку можно генерить даже "налету". Огромное поле для творчества Улыбка Трафика сьедается не много, а польза очевидная. Почти как баннеры только бесплатные.
Похожим приемом пользуется какой-то имидж-хостинг (не помню как называется… с лягушкой Подмигивание )

ИП тоже можно подделать, но эта задача уже другого уровня сложности, доступна гораздо меньшему количеству юзеров.

Аватар пользователя EllECTRONC

Теперь понятно о чем вы! Но такая "легкая картинка" выдается при отсутствии на их сервере изображения, на которое ссылается юзер. А если картинка есть, то она и отображается… Язык

Аватар пользователя sAx

Так они 404-ю обработали, а что мешает повесить на 403-ю Громкий смех

Аватар пользователя EllECTRONC

Улыбка
Ну тогда можно даже не генерить картинку, а выдать им уже заготовленную, к примеру "Внимание: Картинка стырена!" или просто "Фигу". И послать им это тем же методом, что и ботов

Аватар пользователя sAx

Всяко можно, но интереснее сделать так, чтобы народ с ресурса, на котором выложили стыренную у вас картинку, пошел к вам Улыбка

Аватар пользователя dedvitalik

Хорошо пишешь аффтар Громкий смех

Аватар пользователя Mobel

Очень интересный материал. Спасибо!

Аватар пользователя ckrosotka

Очень полезная вещь, спасибо!!

Аватар пользователя Demimurych

@sAx:
>> И еще, защиту надо ставить не по HTTP_REFERER, а по ИП, т.к. HTTP_REFERER подделывается совершенно не сложно.

Либо я не понял о чем Вы либо ВЫ несете чепуху.
От хот линка блокировка по ip никаким образом использоваться не может.
Суть борьбы с хот линком это - отличить откуда пришел запрос - с вашего сайта или с стороннего. Поэтому и используется referer как поле которое по умолчанию содержит адрес откуда пришел запрос.

Вы простите по чьему IP собираетесь контролировать? По IP пользователя?

Аватар пользователя Win32

Лучше бы написали как обходить такую защиту! А то многие сайты установили такую парашу!

Аватар пользователя Hack_phoenix

Ну-ну. Вот от таких, как вы и защищаются люди. Подумайте.

Аватар пользователя Forne

Спасибо, сделал вместо ошибки левую картинку с просьбой перейти на сайт
@Win32 Жжешь Улыбка

Аватар пользователя AllStory

Forne как ты это сделал? Что-то у меня ниче не получается

Аватар пользователя EllECTRONC

Ну, делается это примерно так:

RewriteCond %{HTTP_REFERER} !^$
# Дальше список разрешенных доменов
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]

Аватар пользователя AllStory

Уже сделал, вчера перелопатил мудрый гугл и собрал из множества вариантов самое оптимальное решение:

# Запретить другим сайтам использовать прямые ссылки на ваши картинки
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]

Все проверил - замечательно работает )))))

Аватар пользователя AllStory

Кстати, в правиле:

RewriteRule .*.(jpe?g|bmp|gif|png)$ files/images/nohotlink.jpg [NC,L]

должен стоять слеш между - *. (в комменте он убрался), иначе, без слеша, будут блокироваться любые ссылки, текст которых содержить указанный порядок символов, например такая:
http://example.com/GIFers/text.html
Если правило без слеша, то эта ссылка заблокируется, т.к. содержит в пути порядок символов "gif".

Аватар пользователя Гость

AllStory, вопросик к тебе … вот в этой строчке :

RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google. [NC]

Я так понимаю если не указать зону (ru/com и т.п.) то разрешено будет для любой ?? Я правильно понял ???

Аватар пользователя avarte

Отличная статья и полемика спасибо!
могли бы-вы мне помочь
как прямые ссылки на картинки типа http://example.com/foto_big/3_1.jpg
перенаправлять на страницу http://example.com/shows.php?foto=3_1
буду безмерно признателен.

Аватар пользователя EllECTRONC

как-то так:

RewriteEngine on
RewriteRule ^foto_big/([0-9]+_[0-9]+)\.jpg$ /shows.php?foto=$1

Аватар пользователя АлаичЪ

Перепробовал уже штук 10 разных вариантов защиты от хотлинков, но никак не получается. И ваш вариант пробовал…все равно картинки на вражеских сайтах благополучно отображаются.
В чем может быть дело. Подскажите пожалуйста! Очень прошу.

Аватар пользователя EllECTRONC

Хмм, если вы переходите со своего сайта на "вражеский" или смотрите те же картинки, то для вас они будут видны. Вам нужно почистить кеш браузера и перезагрузить "вражескую страницу". Если они все равно отображаются, то убедитесь что они грузятся с вашего сайта, а не с их. Ну и если, вы все делаете правильно и картинки действительно грузятся с вашего сайта, то пишите в поддержку хостинга и спрашивайте в чем дело с mode_rewrite. Более того посмотрите панель управления вашим хостингом, возможно там уже есть функция Hotlink, так как в большинстве своем, если в панели это есть, то это очень сложно задать вручную.

Аватар пользователя АлаичЪ

Понятно, спасибо. Так как рекомендации по очистке кеша и т.д. не помогли, я отписался в техподдержку. Жду от них ответа на вопросы.

PS Если что, у меня свой сервер, то есть все настройки я могу делать сам. Может я могу и сам решить как-то проблему или где-то проверить настройки?

Аватар пользователя EllECTRONC

На счет настроек сервера, я вам ничем не помогу, сама не админю сервер, у меня хороший админ сервера. Когда были проблемы с Hotlink и Imagecache, мне предложили другой вариант защиты от Hotlink'а

Аватар пользователя АлаичЪ

Да, к такому варианту мы и пришли с моими админами. Так же дело еще в nginx было. В общем проблем много. А самый облом в том что нельзя выдавать картинку-подмену Грустный

Аватар пользователя Zer0CooL

Какой хостинг используете ?
фишка в том что если на хосте используется nginx
то вся эта шляпа работать не будет ! Подмигивание
т.к nginx непонимает файлы .htaccess
p.s и полюбасу необходим mod_rewrite

Что ты об этом думаешь?

МультиВход
ИЛИ

Комментарии