.htaccess - запрет прямого обращения к скриптам

Уроки по PHP, Javascript и т.п.
Ответить
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

.htaccess - запрет прямого обращения к скриптам

Сообщение Noise Gate »

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

Предположим, что домен вашего сайта - mysite.ru и все скрипты находятся в корневой папке сервера. Для того чтобы осуществить задуманное надо создать файл denied.htm (сюда мы будем перенаправлять невалидные запросы) и отредактировать .htaccess

denied.htm

Код: Выделить всё

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><body>Access denied</body></html>
.htaccess (первое приближение)

Код: Выделить всё

RewriteEngine onRewriteBase /RewriteCond %{HTTP_REFERER} !^http://mysite\.ru [NC]RewriteCond %{HTTP_REFERER} !^http://vk\.com [NC]RewriteCond %{HTTP_REFERER} !^http://vkontakte\.ru [NC]RewriteRule ^(.*)$ denied.htm
Надеюсь, это позволит вам немного понять, какие действия будет выполнять наш .htaccess, однако использовать его в таком виде я крайне не рекомендую. Для большей универсальности нам надо предусмотреть возможность обращения из поддоменов WWW. В этом случае .htaccess будет выглядеть следующим образом:

.htaccess (второе приближение)

Код: Выделить всё

RewriteEngine onRewriteBase /RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite\.ru [NC]RewriteCond %{HTTP_REFERER} !^http://(www\.)?vk\.com [NC]RewriteCond %{HTTP_REFERER} !^http://(www\.)?vkontakte\.ru [NC]RewriteRule ^(.*)$ denied.htm
Однако и это еще не все! Дело в том, что из flash приложений обращение к серверу идет с HTTP_REFERER равным примерно следующему:
http://cs1560.vkontakte.ru/u1/0215f402bd09.zip

Чтобы учесть и эту возможность, мы должны еще раз модифицировать наш .htaccess

.htaccess

Код: Выделить всё

RewriteEngine onRewriteBase /RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite\.ru [NC]RewriteCond %{HTTP_REFERER} !^http://(www\.)?(cs[0-9]+)?vk\.com [NC]RewriteCond %{HTTP_REFERER} !^http://(www\.)?(cs[0-9]+)?vkontakte\.ru [NC]RewriteRule ^(.*)$ denied.htm
Этот код защитит вас от посторонних запросов и позволит нормально функционировать приложению. Но есть и минусы - сами вы тоже не сможете обратиться напрямую к своим скриптам. А кроме этого механизмы кэширования на некоторых серверах и хостингах тоже могут стать небольшой проблемой. Поэтому, на мой взгляд, все же лучше будет проверять HTTP_REFERER непосредственно в самом скрипте.

Пользуйтесь на здоровье. Благодарности за топик приветствуются!
Последний раз редактировалось psix55 07 окт 2010, 14:40, всего редактировалось 1 раз.
Причина: По просьбе Noise Gate
butuz
Сообщения: 58
Зарегистрирован: 29 июл 2010, 10:43

Re: .htaccess - запрет прямого обращения к скриптам

Сообщение butuz »

я бы отметил еще минусы такого метода:
- у некоторых юзеров реф не передается, т.о. какой-то процент юзеров потеряется
- тем кому надо легко реф подделают

имхо, лучше каждый пост-запрос к серваку либо шифровать, либо отсылать с дополнительным параметром, который уже проверять на серваке + ессно защита самой флэшки
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: .htaccess - запрет прямого обращения к скриптам

Сообщение Noise Gate »

Да, все верно...
Ответить