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

Уроки по PHP, Javascript и т.п.

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

Сообщение Noise Gate » 07 окт 2010, 14:24

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

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

denied.htm
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <body>
  4. Access denied
  5. </body>
  6. </html>


.htaccess (первое приближение)
  1. RewriteEngine on
  2. RewriteBase /
  3. RewriteCond %{HTTP_REFERER} !^http://mysite\.ru [NC]
  4. RewriteCond %{HTTP_REFERER} !^http://vk\.com [NC]
  5. RewriteCond %{HTTP_REFERER} !^http://vkontakte\.ru [NC]
  6. RewriteRule ^(.*)$ denied.htm

Надеюсь, это позволит вам немного понять, какие действия будет выполнять наш .htaccess, однако использовать его в таком виде я крайне не рекомендую. Для большей универсальности нам надо предусмотреть возможность обращения из поддоменов WWW. В этом случае .htaccess будет выглядеть следующим образом:

.htaccess (второе приближение)
  1. RewriteEngine on
  2. RewriteBase /
  3. RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite\.ru [NC]
  4. RewriteCond %{HTTP_REFERER} !^http://(www\.)?vk\.com [NC]
  5. RewriteCond %{HTTP_REFERER} !^http://(www\.)?vkontakte\.ru [NC]
  6. RewriteRule ^(.*)$ denied.htm


Однако и это еще не все! Дело в том, что из flash приложений обращение к серверу идет с HTTP_REFERER равным примерно следующему:
http://cs1560.vkontakte.ru/u1/0215f402bd09.zip

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

.htaccess
  1. RewriteEngine on
  2. RewriteBase /
  3. RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite\.ru [NC]
  4. RewriteCond %{HTTP_REFERER} !^http://(www\.)?(cs[0-9]+)?vk\.com [NC]
  5. RewriteCond %{HTTP_REFERER} !^http://(www\.)?(cs[0-9]+)?vkontakte\.ru [NC]
  6. RewriteRule ^(.*)$ denied.htm


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

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

За это сообщение автора Noise Gate поблагодарили - 2:
aydar, Pupizoid
Noise Gate

 
Автор темы
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34
Откуда: СПб
Благодарил (а): 31 раз.
Поблагодарили: 64 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение butuz » 07 окт 2010, 18:40

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

имхо, лучше каждый пост-запрос к серваку либо шифровать, либо отсылать с дополнительным параметром, который уже проверять на серваке + ессно защита самой флэшки
butuz

 
Сообщения: 58
Зарегистрирован: 29 июл 2010, 10:43
Благодарил (а): 7 раз.
Поблагодарили: 10 раз.

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

Сообщение Noise Gate » 07 окт 2010, 19:49

Да, все верно...
Noise Gate

 
Автор темы
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34
Откуда: СПб
Благодарил (а): 31 раз.
Поблагодарили: 64 раз.


Вернуться в Уроки на другие темы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0