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

Также в один прекрасный день может получиться так, что посещаемость сайта останется на прежнем уровне, а исходящий трафик резко увеличится и, соответственно, сильно возрастет плата за хостинг. Это означает, что веб-мастер какого-то другого сайта решил сэкономить место на диске и исходящий трафик на своем сервере, и установил прямые ссылки со своих веб-страниц на уже готовые изображения на нашем сайте. Такое использование ресурсов с других сайтов в сети Интернет называется hotlinking.

Как же ограничить несанкционированное использование файлов другими сайтами? Для хостинга, реализованного на базе http-сервера Apache, такое ограничение можно произвести либо через файл .htaccess, либо через встроенный модуль mod_rewrite, позволяющий в том числе «на лету» изменять ссылки, по которым обращается посетитель веб-сайта. С помощью этих двух способов можно сделать так, чтобы доступ к изображениям или другим файлам, расположенным на сервере, можно было осуществлять только со страниц нашего сайта.

Чтобы установить ограничение на доступ к файлам изображений с использованием модуля mod_rewrite, нужно проанализировать ссылку источника запроса, информация о котором содержится в переменной HTTP_REFERER. Возьмем в качестве примера hosting.web-3.ru. Если в переменной HTTP_REFERER записан адрес hosting.web-3.ru, это означает, что пользователь пришел со страниц нашего сайта и имеет право загрузить изображение. Если же в этой переменной нет подстроки hosting.web-3.ru, то пользователь пытается получить доступ к изображению, записанному на нашем сервере, но со страниц другого сайта. В этом случае нужно перенаправить его запрос на другую заранее подготовленную страничку another.htm с сообщением о несанкционированном доступе к нашим ресурсам.

Вот как выглядит эта процедура, записанная в файл .htaccess на сайте hosting.web-3.ru:

AuthUserFile /dev/null

AuthGroupFile /dev/null

RewriteEngine On

RewriteCond % !^http://www.hosting.web-3.ru/

RewriteCond % !^http://hosting.web-3.ru/

RewriteCond % !>http://www.hosting.web-3.ru:80 [NC]

RewriteCond % !>http://hosting.web-3.ru:80 [NC]

RewriteRule ^(/~.+) http://www.hosting.web-3.ru/another.htm [R, L]

Следует отметить, что такая обработка запросов посетителей сайта создает дополнительную нагрузку на процессор сервера, поскольку ссылку источника запроса приходится анализировать несколько раз. Сначала этот анализ производит http-сервер Apache и устанавливает соответствие ссылки и локального файла, хранящегося на сервере. Затем происходит обработка файла .htaccess и ссылка обрабатывается повторно. Все эти операции производят дополнительную нагрузку на сервер.

Менее затратное решение заключается в том, чтобы добавить в файл .htaccess указание возвращать ошибку всем пользователям, которые пришли по «чужой» ссылке, а не с сайта mysite.ru:

SetEnvIfNoCase Referer "^http://hosting.web-3.ru" my_referer=1

<FilesMatch "\.(jpg|jpeg|png|gif)$">

Order Allow, Deny

Allow from env=my_referer

</FilesMatch>

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

Редакция: Александр Гуща
Фото: nizukka.com