При покупке хостинга для сайта зачастую приходится оплачивать не только место на сервере, но и исходящий с сервера трафик. Если затем на сайте с хорошей посещаемостью разместить много объемной графической информации, например, подборку кадров из известных фильмов, то месячный исходящий трафик от такого сайта может измеряться гигабайтами, а то и сотнями гигабайт. Даже если хостер не берет плату за исходящий трафик и не ограничивает его другими способами, передача больших объемов данных создает повышенную нагрузку на сервер – требует дополнительной оперативной памяти и вычислительной мощности процессора.
Также в один прекрасный день может получиться так, что посещаемость сайта останется на прежнем уровне, а исходящий трафик резко увеличится и, соответственно, сильно возрастет плата за хостинг. Это означает, что веб-мастер какого-то другого сайта решил сэкономить место на диске и исходящий трафик на своем сервере, и установил прямые ссылки со своих веб-страниц на уже готовые изображения на нашем сайте. Такое использование ресурсов с других сайтов в сети Интернет называется 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
Антон
Спасибо за статью!
Анатолий
4-links.net - хостиг для вашых файлов. Предназначен как для маленьких проектов, так и для, например, сайта онлайн фильмов.