mod_setenvif и защита от хотлинкинга

Интернет — 24 февраля, 2008 11:26 — Комментариев: 2

Теги: , , ,


Wikipedia дает такое определение хотлинкингу:

Хотлинк (англ. hotlink) — включение в веб-страницу файлов-изображений или других ресурсов с чужого сервера. Этот прием используется недобросовестными вебмастерами, которые заставяют браузер посетителя загружать картинки с чужого сервера. Тем самым расходуются чужие ресурсы и трафик.

Как от него защититься?

Первый способ, который приходит в голову - использование mod_rewrite. Получается примерно так:

1 2 3 4 5
RewriteEngine On
RewriteBase /
# Steal protect
RewriteCond          %{HTTP_REFERER}              !avtobeginner\.ru      
RewriteRule          \.(jpe?g|gif|bmp|png)$       dnts.gif               [L]

В результате, если HTTP_REFERER не содержит avtobeginner.ru - показывается картинка dnts.gif

При таком подходе существуют два недостатка:

  • Из-за использования mod_rewrite при обработке запроса с чужого домена происходит 2 запроса: сначала исходного файла, потом “специальной” картинки.
  • Т.к. отдается специальная картинка - траффик (а он у некоторых хостеров бывает платным) все равно расходуется.

На выручку приходит модуль mod_setenvif. Он позволяет задавать переменные окружения в зависимости от запроса.

Для защиты картинок пишем так:

1 2 3 4 5 6
SetEnvIfNoCase Referer "^http://avtobeginner.ru" local_ref=1
SetEnvIfNoCase Referer "^http://www.avtobeginner.ru" local_ref=1
<FilesMatch "\.(gif|jpg|jpeg|png)$">
    Order Allow,Deny
    Allow from env=local_ref
</FilesMatch>

Таким образом мы разрешаем доступ к картинками (по маске [можно добавить и другие типы файлов]) только “локально”. Запрос считается “локальным” если пришел с домена, содержащего avtobeginner.ru. Все остальные увидят 403 Forbidden.




Комментариев: 2

Вы можете следить за комментариями через RSS-ленту. Вы можете оставить комментарий, или trackback с вашего сайта.

  1. Alexey
    25 Фев 2008 в 13:40 — Ответить

    Респект замечательная заметочка!

  2. Knave
    26 Фев 2008 в 12:05 — Ответить

    Кстати, всплыл один неприятный момент.

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

    А т.к. картинка тянется “не локально” - то apache говорит “Ахтунг” и закрывает доступ.

    Вот.


Оставить комментарий


   
Add to Technorati Favorites
Читать в Яндекс.Ленте
Получать RSS-ленту на почту

Топ комментаторов

Интернет - августа 12, 2008 13:44 - Комментариев: 8

Про MySQL

Еще в рубрике Интернет


Рукоприкладство - июля 11, 2008 20:59 - Нет комментариев

Сдали: VEGA

Еще в рубрике Рукоприкладство


МайЛайф - августа 2, 2008 21:49 - Нет комментариев

День рождения ПБК

Еще в рубрике МайЛайф