Защита от хотлинкинга изображений

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

Нам понадобится отредактировать файл .httacces. Я добавил следующий код:

#запрет хотлинкинга
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !(elims.org.ua|(.*).google.(.*)|yandex.(.*)|feeds.feedburner.com) [NC] 
RewriteRule \.(jpg)$ /elims.jpg [NC,R,L]

В строке:

!(elims.org.ua|(.*).google.(.*)|yandex.(.*)|feeds.feedburner.com)

указал каким сайтам можно размещать у себя изображения с моего сервера: естественно моему сайту elims.org.ua, всем сайтам которые содержат в адресе ".google." и "yandex", а также rss-агрегатору feeds.feedburner.com

В строке:

RewriteRule \.(jpg)$ /elims.jpg [NC,R,L]

указал расширение файлов которые запрещено встраивать в свои страницы (можно было указать несколько расширений -  "\.(gif|jpg|png)$" ) и адрес изображения которое будет отображаться вместо того, которое было ранее встроено, оно лежит у меня в корне сайта - "/elims.jpg".

Изображение выглядит вот так:

Защита от хотлинкинга

Теперь раз в сутки буду заглядывать в логи Apache и смотреть на каких сайтах сработала переадресация: открываем лог-файл в notepad++ и ищем все строки по фильтру "(.*)jpg (.*) 302". Если среди этих сайтов будут те, кого стоит исключить, например поисковые системы или rss-агрегаторы, то буду добавлять их в исключения.

Пример выборки по фильтру из лога:

GET /pritchi/files/2013/09/umnaya-pritcha-klad-i-uporstvo.jpg HTTP/1.0" 302 213 "http://swetlana49.blogspot.ru/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
GET /pritchi/files/2013/10/malenkaya-pritcha-o-rabote-zhguchee-zhelanie.jpg HTTP/1.0" 302 213 "http://shatunov.com/forum/viewtopic.php?f=24&t=35&start=240" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
GET /pritchi/files/2012/10/Yu1y0VnK3Qo1.jpg HTTP/1.0" 302 213 "http://zhuzhan.livejournal.com/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
GET /pritchi/files/2012/10/roWBK4LQBR81.jpg HTTP/1.0" 302 213 "http://motivatsya.blogspot.com/2014/07/blog-post_7152.html?spref=fb&fb_locale=de_DE" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"

Не обязательно вместо встроенного изображения отображать какое-либо другое изображение. Можно просто запретить их отображение вот так:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !www.example.com [NC]
RewriteRule \.(gif|jpg|png)$ - [F,NC]

Но вариант с перенаправлением куда интересней, правда? =)

Понравилось? =) Поделись с друзьями:

Обсуждение записи “Защита от хотлинкинга изображений”

  1. Architectofruin (oddstyle.ru) says:

    Честно говоря, использовать картинку с чужого сервера — это бред. А потом, если на сервере поменяются постоянные адреса или картинка будет куда-нибудь перемещена, в оригинальной статье останется пустое место. Статья просто станет в итоге нечитабельной, особенно если это какое-нибудь руководство.

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

  2. Владимир Демянович (elims.org.ua) says:

    Architectofruin, согласен. Правда все блогеры начинали с бесплатных хостингов, экономии ресурсов и копипаста. С опытом приходит пересмотр взглядов по поводу того, что все нужно хранить у себя и генерировать свой контент.

  3. Владислав (adobe-master.ru) says:

    Владимир, а чего Вы жалеете свои картинки для других? Они ценные какие-то? Тем более, их проблемы будут. Так как выкладывать картинки, которые лежат не у Вас на сервере очень глупо. Тот сайт прекратит свое существование, и что делать? Картинки уже не вернуть. Хотя бы на фотохостинги заливать, известные, шансов меньше что пропадет картинка.
    Но, я не парюсь, у меня хостинг безлим :)

  4. Владимир Демянович (elims.org.ua) says:

    На фотохостинги заливать тоже глупо, так как у крупных фотохостингов серверов много, и эти изображения заливаются не на один сервер, а на разные.

    Когда посетитель открывает, например, главную страничку, на которой к каждому из 10 постов есть изображение, то для того чтобы их получить — необходимо обратиться к 10 разным серверам. А для этого нужно сделать 10 dns запросов, это замедляет загрузку.

    А замедленная нагрузка дает меньше посетителей. Например когда я ускорил загрузку своего сайта на 300-400 миллисекунд моя посещаемость увеличилась с 1200 до 1700 хостов.

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

    А почему жалею? Хм.. Я не жалею, я просто оптимизировал нагрузку на хостинг. Поставил себе такую задачу. Понимаю что хотлинкинг изображений почти нагрузку не создает. Но с миру по нитке… Оптимизировал все подряд. В результате мой аккаунт ранее создавал 50% нагрузки от квоты, сейчас создает 20% от квоты. А значит я еще могу долго не париться по поводу того, что моя квота будет превышена.

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

  5. name nika (olgworld.com) says:

    Владимир, у меня по моему это приключилось. А если не ставить картинку.А просто запрет в файле .httacces. Как эта вставка будет выглядеть?

  6. Владимир Демянович (elims.org.ua) says:

    На практике не проверял, должна выходить страница с 403-й ошибкой

  7. name nika (olgworld.com) says:

    Я тебе на почту скину скрин. Посмотри пожалуйста это именно , то о чем ты говоришь в статье? Или я ошибаюсь?

Обсудить