Htaccess закрыть паролем. Создание файла паролей htpasswd. Где можно реализовать

Лично я использую.htaccess для паролирования папок своего сайта. Хороший пароль – залог безопасности, это аксиома!

Для начала рассмотрим пример, а потом поясним что это значит:

require valid-user

Данный файл нужно положить в ту директории, на которую мы хотим поставить пароль.

Директива AuthName выводит сообщение при запросе пароля, все сообщения необходимо писать в одну строчку, синтаксис директивы тривиален:

AuthName «SEE TEXT»

Директива AuthType выбирает тип аутентификации. Возможны следующие типы: Basic или Digest . Второй может не поддерживаться некоторыми браузерами, поэтому пользоваться им не рекомендуется.

AuthType Basic | Digest

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

Создать данный файл можно двумя способами. Если у Вас установлена операционная система семейства Windows вы можете скачать программу которая генирирует данный файл. Либо подключится к серверу по SSH и воспользоваться утилитой htpasswd. Либо воспользоваться той же утилитой, входящей в поставку web-сервера Apache (в случае если он установлен, если нет качайте для Win), c помощью командной строки Windows ввести: htpasswd.exe -cm .htpasswd admin , где:

Cm – это команды на создание файла с использованием MD5;

Htpasswd – имя файла, который будет создан;

admin – имя пользователя.

После запуска Вам будет выдан запрос на ввод пароля и подтверждение. В результате будет создан файл .htpasswd примерно такого содержания:

admin:$apr1$9o0…..$3nAi6rAX1RtHDzL7PPW/i/

что соответствует логину – admin и паролю – password.

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

В случае подключения к серверу по SSH и использования утилиты htpasswd без параметров мы увидим:

kjan ~ # htpasswd

htpasswd [-cmdps] passwordfile username

htpasswd -b passwordfile username password

C Create a new file.

Здесь не будут рассматриваться все параметры этой команды, но вы можете сами прочитать подробности, запустив htpasswd в unix shell или ознакомившись с соответствующей страницей документации по Apache.

Итак, изначально у нас еще нет файла с паролями и нам нужно его создать:

kjan ~ # htpasswd -c authfile test1

Re-type new password

Adding password for user test1

После выполнения данной операции htpasswd создаст файл passwords , в котором окажется пользователь test1 и его пароль в зашифрованном виде:

kjan ~ $ cat .authfile

test1:zgco1KREjBY8M

А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть, мы просто не будем использовать ключ «-c» :

kjan~ # htpasswd .authfile test2

Re-type new password:

Adding password for user test2

kjan~ $ cat .authfile

test1:zgco1KREjBY8M

test2:eN3uA6t0kzV1c

Вернемся к описанию директив паролирования директорий. Директива Require определяет пользователей, которые могут получить доступ

Require USER_NAME | valid-user

Указывая valid-user вы разрешаете доступ всем пользователям, перечисленным в файле паролей.

AuthName «Protected area, need authorization»

AuthUserFile /home/t/test/.authfile

require valid-user

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

Используя стандартные модули Apache, возможно запрашивать логин и пароль у пользователя при попытке доступа к определенной странице или каталогу. Доступ будет разрешен, если логин и пароль присутствуют в специальном файле.

Создание файла с паролями

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

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

Admin:YFC5nYLiUI2ig vasya:bnqw1eZHP2Ujs

Для шифрации паролей применяется утилита htpasswd , которая поставляется в комплекте с Apache. Чтобы создать новый файл с данными о
пользователе admin , введите команду:

$ htpasswd -c .htpasswd admin

Для добавления в уже существующий файл используется команда:

$ htpasswd .htpasswd vasya

После запуска, утилита попросит дважды ввести пароль и, если они совпадут, данные о пользователе будут добавлены.

Ограничение доступа

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

AuthType Basic AuthName "Administrative zone" AuthUserFile /var/www/example.com/admin/.htpasswd Require valid-user

Вам необходимо будет изменить путь к каталогу (Directory), путь к файлу с паролями (AuthUserFile) и строку-приглашение (AuthName), которая выдается на экран пользователю при запросе пароля. Значение других директив вы можете узнать из документации Apache.

После внесения изменений в файл конфигурации, не забудьте перезагрузить Apache.

Примечания

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

В примере показан простейший типа аутентификации — Basic . Следует знать, что в этом случае пароль передается от клиента к серверу в открытом, незашифрованном виде. Если это вас не устраивает, вы можете использовать другой вид аутентификации или протокол HTTPS.

Рассмотрим интересный способ защиты сайта, или директории (папки) сайта, например с административной частью.

Данный способ достаточно прост, но в тоже время является очень надежным, при условии использования «нормального хостинга», так как данный тип защиты паролем через htaccess и htpasswd строиться средствами самого сервера Apache.

Ещё один плюс данного способа – это то, что происходит защита паролем самой директории и плюс подпапок и абсолютно всех файлов внутри этой папки. Также без авторизации не возможно будет отправить ни $_POST ни $_GET запросов к защищенным файлам…вообще ничего.

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

Почему не стоит данный способ использовать на «копеечном хостинге»?

Дело в том что, как правило, такой тип хостинга подразумевает не качественную настройку Apache, и этим самым Вы можете просто открыть злоумышленникам дорогу в «защищаемую» директорию.

И так приступим…

Инструкция защиты через htaccess и htpasswd

Нам потребуется:
  • Доступ по протоколу FTP
  • Наличие прав на создание-редактирование файла htaccess
  • Утилита для создания и шифрования пароля htpasswd.exe,
Создаем файл для защиты htaccess

Проще всего этот файл создать с помощью обычного блокнота. Жмем правой кнопкой мыши на рабочий стол: создать -> текстовый документ. Открываем его с помощью обычного блокнота Windows. Жмем Файл -> Сохранить как…

Создание файла паролей htpasswd
Копируем скачанную утилиту в корень диска C . Далее поймете, зачем именно в корень.

Запускаем консоль («Пуск» -> «Выполнить», пишем cmd и жмем «ОК»). Переходим в корень диска C (пишем команду cd/ ).

В самой нижней строчке, где мигает курсор должно быть написано «C:\>» - мы в корне диска C.

Теперь пишите следующую команду:

Htpasswd -cm .htpasswd admin
На конце команды admin – это имя пользователя (Логин). Можете использовать любое(английские буквы, без пробелов).

Вам предложат ввести пароль. Вводим, переключившись на английскую раскладку. Жмем энтер на клавиатуре и повторно вводим тот же пароль. Опять энтер. Готово. Файл .htpasswd создан в корне диска C. Закрываем консоль.

Подключаемся к сайту по FTP и переходим в директорию, которую защищаем через htaccess и htpasswd.

Перекидываем в корень этой папки созданный файл.htpasswd

Теперь нам нужно выяснить абсолютный путь к файлу.htpasswd на хостинге…если Вы уже знаете – хорошо, если нет, то вот что нам нужно:

1. Рядом с файлом паролей на хостинге создаем файл, например er2344fsdxaasdl.php
2. Отрываем окно редактирования этого файла и пишем следующий код:


3. Сохраняем и закрываем.
4. Открываем браузер и пишем в адресной строке

Http://www.сайт.ru/защищаемая_директория/er2344fsdxaasdl.php
Жмем энтер. И видим большую таблицу о версии PHP и прочие данные.

5. Слева колонка с параметрами, справа колонка со значениями этих параметров. Нам нужно значение параметра SCRIPT_FILENAME . Допустим, оно имеет значение:

/home/w/user/сайт.ru/public_html/защищаемая_директория/er2344fsdxaasdl.php
Копируем это значение куда-нибудь, без названия нашего php-файла , т.е. копируем только это:

/home/w/user/сайт.ru/public_html/защищаемая_директория/
Это и есть абсолютный путь до нашей защищаемой директория. Наш php-файл er2344fsdxaasdl.php обязательно удалить!

Сам процесс защиты через htaccess и htpasswd
Теперь открываем с помощью блокнота файл.htaccess на рабочем столе (или где вы его сохраняли?). Вписываем в него:

AuthType Basic AuthName "Admin interface" AuthUserFile /home/w/user/сайт.ru/public_html/защищаемая_директория/.htpasswd require valid-user deny from all
Заметьте, у AuthUserFile прописан наш скопированный абсолютный путь плюс имя файла.htpasswd

Сохраняем изменения через Ctrl+S или «Файл» -> «Сохранить» .

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

Вот и все. Директория защищена. Закройте браузер и запустите его снова.

Откройте в вкладке адрес

Http://www.сайт.ru/защищаемая_директория/
У Вас должно появиться окно ввода логина и пароля. Если этого не произошло, значит Вы где-то ошиблись…проделайте весь процесс заново и очень внимательно.

Попробуйте ввести не правильный пароль и увидите сообщение об ошибке.

Сеанс будет длиться до тех пор, пока Вы не закроете браузер.

Пишите в комментариях, если возникнут проблемы…разберемся вместе.

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

Чтобы запретить доступ ко всему сайту, необходимо в файле.htacces написать следующее:



Запретить доступ только с конкретного ip-адреса:


deny from all
order allow deny
deny from all
deny from ip_адрес_пользователя


"ip_адрес_пользователя " необходимо заменить на конкретный ip-адрес.

Чтобы разрешить доступ только с конкретного ip-адреса, можно написать:


order allow deny
deny from all
allow from ip_адрес_пользователя


Так же с помощью файла.htaccess можно запретить доступ к конкретному файлу. Например, запретим доступ пользователей к самому файлу.htaccess. При этом сервер сможет использовать инструкции, указанные в файле:


< Files .htaccess >
order allow,deny
deny from all

Защита файлов

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

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



ваш_сайт.ru .*$


В скобочках через символ "|" указаны расширения файлов, доступ к которым будет запрещен всем, за исключением сервера и пользователей сайта ваш_сайт.ru

Чтобы открыть доступ к файлам с этим расширением для пользователей поисковых систем необходимо исключить на них запрет так же, как на ваш_сайт.ru:


RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?ваш_сайт.ru
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yandex.ru
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yahoo.
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?bing.
RewriteRule \.(jpe?g|bmp|gif|png|css|zip|pdf|txt|doc)$ -

Защита паролем

При помощи файла дополнительной конфигурации.htacces возможно установить пароль на директорию сайта, конкретный файл или группу файлов с одинаковым расширением. Чтобы установить пароль на директорию, в.htaccess необходимо написать:


AuthName "What do you want? "
AuthType Basic
AuthUserFile
require valid-user


Файл.htaccess, содержащий эти строки необходимо поместить в директорию, доступ к которой мы хотим закрыть. При попытке пользователя зайти на соответствующий раздел сайта сервер отдаст код статуса 401 (требуется авторизация) и выведет окно с полями для ввода имени пользователя и пароля и сообщением "What do you want?", указанным в директиве "AuthName" (допускаются только латинские символы и цифры).

Имена пользователей и пароли хранятся в файле.htpasswd. Путь к этому файлу задается в директиве "AuthUserFile".

Важно: путь к файлу.htpasswd указывается абсолютный, от корневого каталога сервера.

Чтобы узнать путь к.htpasswd, который необходимо указать в.htaccess, можно создать файл php, содержащий:


< ?php echo $_SERVER["DOCUMENT_ROOT"]; ? >


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

Установить пароль на конкретный файл можно следующим образом:


< Files file.txt >
AuthName "It"s not for all"
AuthType Basic
AuthUserFile /home/сервер/ваш_сайт.ru/pass/.htpasswd


Пароль на группу файлов:


< Files "\.(sql)$" >
AuthName " It"s not for all "
AuthType Basic
AuthUserFile /home/сервер/ваш_сайт.ru/pass/.htpasswd


В данном случае все файлы, имеющие расширение.sql будут доступны только по паролю.



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

1.Для начала, надо создать файл.htpasswd

а) исходя из нашил реалий, не каждый пользователь хостинга, имеет доступ к серверу по ssh. Так что если дома Вы счастливый обладатель OS Windows, для этого можно использовать утилиту htpasswd.exe, что бы создать файл.htpasswd на своём домашнем компьютере.

Нажмите "Пуск -> Выполнить", введите в строку ввода cmd и нажмите ОК. Вам откроется окно утилиты CMD. Перейти в директорию с файлом htpasswd.exe. Теперь нужно дать команду на создание файла с паролем. Введите в командную строку следующее:

htpasswd -cm .htpasswd admin

Cm - это ключи для утилиты.

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

Ключ m - определяет шифрование по алгоритму MD5.

Htpasswd - имя файла с паролями (можете использовать любое имя).

admin - имя посетителя (логин), которому будет разрешен доступ в закрытую область сайта.

В ответ, должен появится запрос на ввод пароля и далее его повтор.

Если все правильно, то в завершении появится сообщение: Adding password for user admin.

И в директории рядом с htpasswd.exe появится файл.htpasswd, к котором будет находиться строка с именем пользователя и хеш-кодом его пароля.

admin:$apr1$yQ3.....$O0qnYRoFRdZQUhs/jDaQP0

Для того, что бы в тот же файл.htpasswd добавить еще одного пользователя следует убрать ключ -c из команды запуска утилиты htpasswd.exe

htpasswd -m .htpasswd admin

Теперь файл.htpasswd можно скопировать на хостинг в отдельную директорию, например в /var/www/html/my-site/admin/

б) если Вы имеете доступ по ssh или у Вас установлен дома Linux, то файл.htpasswd генерируется с помощью утилиты htpasswd из комплекта Apache. Для этого нужно написать в командной строке следующее:

htpasswd -bc .htpasswd имя_пользователя пароль_пользователя

Теперь файл.htpasswd можно скопировать (перенести) в отдельную директорию на хостинге, например в /var/www/html/my-site/admin/

2. В директории сайта, которую Вы хотите защитить паролем, необходимо создать файл.htaccess, в который запишем такие строки:

а) если надо поставить пароль на всю директорию

AuthType Basic
AuthName "Private zone. Only for administrator!"
require valid-user

б) если надо поставить пароль на файл


AuthName "admin-zone"
AuthType Basic
AuthUserFile /var/www/html/my-site/admin/.htpasswd
require valid-user

AuthUserFile - это полный путь к файлу.htpasswd от корневой директории ОС Linux. В случае с операционной системой Windows так: c:/my_site/.htpasswd.

AuthName - "произвольный_текст" например "Панель управления". Этот текст будет отображаться в окне для ввода логина и пароля.

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