Как защититься от несанкционированного доступа к ресурсам сайта?
Очень часто, приобретая пакет хостинг-услуг для сайта, приходится платить не только за место на сервере, но еще и за исходящий с этого сервера трафик. Если сайт имеет хорошую посещаемость, а на нем еще и размещена различная объемная графическая информация, вроде отрывков из популярных фильмов, то объемы исходящего трафика в месяц могут достигнуть нескольких гигабайт, и даже сотен гигабайт. Даже если исходящий трафик ничем не ограничен, и хостер не берет за него плату, то сервер все равно будет испытывать повышенную нагрузку при передаче данных в больших объемах. А это будет требовать дополнительной вычислительной мощности процессора, а также и оперативной памяти.
Может случиться такая ситуация, что при прежнем уровне посещаемости сайта объемы исходящего трафика могут сильно возрасти, что приведет, соответственно, к увеличению платы за хостинг. Это может означать только одно – вэб-мастер другого сайта в целях экономии места на диске и исходящего трафика на своем сервере создал на своих вэб-страницах прямые ссылки на графическую информацию, размещенную на нашем сайте. Такое незаконное использование ресурсов одних сайтов другими называется hotlinking.
Какими же способами возможно пресечь такое несанкционированное использование ресурсов нашего сайта пользователями с других сайтов? Для хостинга на базе http-сервера Apache есть два варианта ограничить hotlinking. С их помощью доступ пользователей к информации на сервере становится возможным исключительно с вэб-страниц вашего сайта. Первый способ ограничения – через файл .htaccess. Второй способ – при помощи встроенного модуля mod_rewrite, который дает возможность «на ходу» менять ссылки, используемые посетителями сайта.
Ограничить доступ к файлам с использованием встроенного модуля mod_rewrite можно, если провести анализ ссылки источника запроса, информацию о котором можно узнать из переменной HTTP_REFERER. Для примера возьмем сайт dinohost.ru. Если в переменной HTTP_REFERER указан адрес dinohost.ru, это значит, что пользователь зашел с нашего сайта, поэтому загрузить изображение или другую информацию он может. А если в переменной HTTP_REFERER прописан другой адрес, а не dinohost.ru, то это значит, что пользователь с другого сайта пытается получить информацию, размещенную на вашем сайте. В таком случае его запрос перенаправляется на заранее подготовленную страницу another.htm, где высвечивается сообщение о том, что такой доступ к вашим ресурсам является несанкционированным.
Процедура записи в файл .htaccess на сайте dinohost.ru выглядит следующим образом:
AuthUserFile /dev/null
AuthGroupFile /dev/null
RewriteEngine On
RewriteCond % !^http://www. dinohost.ru/
RewriteCond % !^http://dinohost.ru/
RewriteCond % !>http://www.dinohost.ru:80 [NC]
RewriteCond % !>http://dinohost.ru:80 [NC]
RewriteRule ^(/~.+) http://www.dinohost.ru/another.htm [R, L]
Следует обратить внимание на то, что при обработке запросов пользователей сайта ссылку источника запроса необходимо анализировать не один раз. Сначала http-сервер Apache проводит анализ и устанавливает, соответствует ли ссылка локальному файлу, хранящемуся на сервере. Затем ссылка повторно обрабатывается при обработке файла .htaccess. Все эти повторяющиеся операции приводят к тому, что процессор сервера подвергается дополнительной нагрузке.
Можно также использовать менее затратное решение. Для этого необходимо в файл .htaccess добавить указание выдавать ошибку тем пользователям, которые зашли не с вашего сайта, а по ссылкам чужих сайтов. Такая запись будет иметь следующий вид:
SetEnvIfNoCase Referer “^http://dinohost.ru” my_referer=1
<FilesMatch “\.(jpg|jpeg|png|gif)$”>
Order Allow, Deny
Allow from env=my_referer
</FilesMatch>
С помощью подобных приемов можно ограничить доступ пользователям, пришедшим с других сайтов, не только к графическим файлам, но и абсолютно ко всем ресурсам нашего сервера. С помощью гибкого подхода ограничения доступа к файлам через файл .htaccess можно и сэкономить объемы исходящего трафика нашего сайта, и снизить плату за хостинг.