htaccess — запретить доступ

htaccess запретить доступ

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

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

В этой статье я покажу как можно:

  • С помощью .htpasswd и .htaccess запретить доступ к папке сайта.
  • Закрыть доступ к сайту для всех, кроме одного IP адреса.
  • С помощью .htaccess и .htpasswd настроить политику прав пользователей.
  • Создать .htpasswd файл паролей, и где его лучше расположить.

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

Как с помощью .htpasswd и .htaccess запретить доступ к папке сайта.

Если ты читатель не знаешь, что это за файлы поясню:

.htaccess – файл дополнительной конфигурации веб-сервера.

.htpasswd – файл содержащий пары логин и пароль в MD5 хеше, используемый в механизме базовой аутентификации.

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

htaccess-htpasswd запретить доступ

 

Только после того как пользователь правильно введет пару логин и пароль, соответствующую занесенной в файл .htpasswd, он будет допущен к просмотру скрытой области сайта.

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

1. Добавьте в созданный файл следующее содержание:

1
2
3
4
AuthType Basic
AuthName «Please input login and password!»
AuthUserFile  /usr/host/mysite/.htpasswd
require valid-user
  • AuthType — может иметь значение Basic или Digest, в нашем случае нам подойдет Basic.
  • AuthName — текст выводимый вместе с формой авторизации.
  • AuthUserFile — путь к файлу с паролями (.htpasswd).
  • AuthGroupFile — путь к файлу групп, если он существует.
  • Require — определяет параметры аутентификации. (User,Group,Valid-user) Valid-user – все прошедшие проверку. User – пользователи имеющие права доступа. Group – группы пользователей имеющие права доступа.

2. Теперь создайте файл .htpasswd и в него поместите следующую строку:

1
admin:$apr1$ejtOHg/4$cMColJLMZ39weAalo3V8k0

Строка эта содержит пару логин и пароль где:

1
2
Логин: admin
Пароль: 1

Чтобы генерировать любые пароли для файла .htpasswd можно воспользоваться утилитой для генерации паролей htpasswd.exe

Скачать утилиту для генерации паролей htpasswd.exe ( Скачали: 245 чел. )

Пользоваться утилитой для генерации паролей очень легко, нужно создать файл .htpasswd и в программе выбрать его с помощью кнопки “Old file“. Далее все интуитивно понятно, вводим новых пользователей и пароли к ним, затем жмем на “Update“. Кстати данная утилита генерации паролей для htpasswd, может не только создавать новые, но и редактировать старые пароли. Что очень удобно, в случае если вы забыли старый пароль. Еще стоит сказать что эта утилита является стандартной и поставляется вместе с сервером Apache.

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

Утилита для генерации паролей htpasswd.exe

Теперь важный для новичков момент! Напротив директивы AuthUserFile в .htaccess должен быть прописан абсолютный путь до файла с паролями. Узнать путь можно многими способами, но самый легкий и точный, на мой взгляд, это выполнить в index.php строку кода:

1
echo $_SERVER[‘DOCUMENT_ROOT’];

Выполнение этой строчки кода приведет к выводу на страницу абсолютного путь до корня сайта, который нам и нужен.

Внимание важное замечание! Очень полезным будет расположить файл с паролями вне папки с содержимым сайта. Это позволит защитить его от злоумышленников.

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

1
2
3
<Files .htpasswd>
deny from all
</Files>

Настало время проверить работоспособность базовой авторизации. Откроем сайт через любой браузер.

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

Запретим доступ к одному файлу

Кроме запрета на директорию можно установить ограничение доступа к конкретному файлу, для этого нужно обрамить запись из .htaccess в тег <Files>

1
2
3
4
5
6
<Files «passwd.txt»>
AuthType Basic
AuthName «Please input login and password!»
AuthUserFile  /usr/host/mysite/.htpasswd
require valid-user
</Files>

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

Как с помощью .htaccess и .htpasswd настроить политику прав пользователей

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

Допустим, у нас есть сайт http://lifeexample.ru и три директории отличающиеся степенью секретности.

  1. http://lifeexample.ru/index.php – доступ имеют все пользователи из файла .htpasswd .
  2. http://lifeexample.ru/admin/ – доступ имеют админы и cуперпользователи.
  3. http://lifeexample.ru/admin/root/ – доступ имеют только cуперпользователи.

Чтобы реализовать разграничение пользователей, нужно объединить их в группы. Для этого в системе базовой аутентификации предусмотрен механизм работы с группами пользователей.

Создадим файл .htgroup, в него запишем группы и их пользователей в таком виде:

1
2
3
Users: user user2 user3
Admins: admin admin2 admin3 user3
Root: root root2 root3

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

Теперь в настройках .htaccess заменим строку:

1
require valid-user

на следующую:

1
require group Users Admins Roots

И расположим файл в главной директории сайта. Проверяем… И видим что ничего не работает. Это вполне объяснимо ведь мы не указали путь до файла с группами. Перед require добавим AuthGroupFile указав в ней путь:

1
AuthGroupFile /usr/host/mysite/.htgroup

Теперь можно радоваться, все заработало.

Т.к. файл .htaccess располагается в главной директории, вышеперечисленными действиями мы отрываем доступ к http://lifeexample.ru/index.php для всех имеющихся пользователей.

Следующей задачей будет отсеять обычных пользователей и оставить доступ только группам Admins и Roots к части http://lifeexample.ru/admin/. Сделать это проще чем кажется, нужно только скопировать .htaccess из главной директории, в папку “/admin” и подправить список допустимых групп, удалив из него группу Users.

Аналогичную операцию проделаем для папки “/admin/root” предназначенной только суперпользователям. Скопируем файл настроек и оставим там только группу Roots.

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

Страница заглушка

В начале статьи я упомянул о том, что задача запрета доступа к сайту возникает при проведении технических работ. В этот период все пользователи должны перенаправляться на страницу “Заглушку”, в которой будет расположена информация о приводящихся работах.

Страница заглушка

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

1
2
3
4
5
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !=127.0.0.1
RewriteRule ^.* zaglushka.php [L]
</ifModule>

Добавив эти строки и, заменив “127.0.0.1” на свой реальный IP адрес, только мы будем иметь доступ к содержимому сайта, а все остальные IP адреса, будут перенаправляться на страницу zaglushka.php. Кстати ее нужно будет создать и поместить в корневую директорию.

Может случиться так что модуль перенаправления mod_rewrite.c будет отключен хостером. Тогда с эту задачу можно будет решить с помощью php:

1
2
3
4
5
6
7
8
9
10
11
12
$SecretKey = ‘123456789’;
$AdminCookie = ‘Вход выполнен’;
if ($_COOKIE[‘AdminCookie’] != $AdminCookie && $_SERVER[‘QUERY_STRING’] != $SecretKey) {
require_once ‘zaglushka.html’;
exit;
} else {
setcookie(‘AdminCookie’, $AdminCookie, time()+3600*24*365, ‘/’);
if ($_SERVER[‘QUERY_STRING’] == $SecretKey) {
header(‘Location: /’);
exit;
}
}

Для того чтобы получить доступ к сайту нужно ввести http://имя сайта/?123456789, если код не будет веден, пользователю будет выдана страница заглушка.

Конечно, можно обойтись и более коротким куском кода:

1
2
3
if($_SERVER[‘REMOTE_ADDR’] != «мой.ip.адр.ес»){
header(‘Location: /zaglushka.html’);
}

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

С помощью данного скрипта можно реализовать хорошую систему аутентификации сайта с запретом доступа отдельных пользователей.

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

Аналогичный механизм с использованием cookes и секретного ключа можно выполнить с помощью .htaccess:

1
2
3
4
5
6
RewriteCond %{HTTP_COOKIE} !hash276819937ee81772017638837ab49992heef78=true [NC]
RewriteCond %{QUERY_STRING} (123456789)
RewriteRule .+ setcookie.php?%1 [L]
RewriteCond %{HTTP_COOKIE} !hash276819937ee81772017638837ab49992heef78=true [NC]
RewriteRule .+ index.html [L]
RewriteRule .+ index.php

Закрыть сайт для всех ip адресов

Иногда случается так, что нужно закрыть доступ к сайту кардинально без использования аутентификации, для всех, кроме себя конечно. Сделать это можно все тем же .htaccess

1
2
3
order deny,allow
deny from all
allow from 127.0.0.1 #[СВОЙ IP]

127.0.0.1 – заменить на свой.

Закрыть сайт для списка ip адресов

1
2
3
4
Order deny,allow
Deny from all
Allow from 127.0.0.1 #[ запрет для одного IP]
Allow from 127.0     #[ запрет со всех серверов, начинающихся на эти числа]

В этой статье мы рассмотрели тему: “Как с помощью htaccess запретить доступ к части сайта”, статья получилась объемная и хотелось бы подвести итоги. И так самое главное было понять, как работает механизм базовой аутентификации, и зачем он вобще нужен. Напомню, что данную аутентификацию лучше не использовать там где нужно реально защитить важную информацию. Если ты уважаемый читатель еще не разобрался с тем как настраивать файлы паролей и групп, предлагаю тебе скачать их в готовом виде:

Скачать все файлы в одном архиве ( Скачали: 245 чел. )

 

Ссылка на оригинал статьи
http://lifeexample.ru/razrabotka-i-optimizacia-saita/htaccess-zapretit-dostup.html

   Отправить статью как PDF