HTTP Authentication с PHP как FastCGI/SuExec

HTTP Authentication с PHP как FastCGI/SuExec

10 Июнь 2011

Однако, есть обходной путь, который покажет как сделать HTTP-авторизацию для PHP так-же как и для CGI.

Если скрипт постоянно выдает форму ввода лоина и пароля при HTTP авторизации, то либо Вы не правильно вводите логин и пароль, либо ваш PHP установлен и работает как FastCGI. Но решение есть.

Первое, что надо сделать это создать .htaccess в папке к которой хотим запретить доступ:

1
2
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Он переназначает пару логин/пароль в переменную HTTP_AUTHORIZATION

В php скрипте должно быть следующее:

1
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

А вот на что будет похож наш файл с авторизацией:

1
2
3
4
5
6
7
8
9
10
11
12
13
// split the user/pass parts
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
// open a user/pass prompt
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "Hello, ".$_SERVER['PHP_AUTH_USER'];
echo "You entered as your password: ".$_SERVER['PHP_AUTH_PW'];
}

Вот и вся хитрость. Пользуйтесь на здоровье.

Спасибо: http://iteye.ru/279/http-authentication-s-php-kak-fastcgisuexec

 


И на закуску

 

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

Здравствуй уважаемый читатель блога LifeExample, сегодня, я хочу рассмотреть тему ограничения доступа к директориям сайта. Очень часто вебмастер сталкивается с вопросом: как с помощью файла .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

Пользоваться утилитой для генерации паролей очень легко, нужно создать файл .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 запретить доступ к части сайта”, статья получилась объемная и хотелось бы подвести итоги. И так самое главное было понять, как работает механизм базовой аутентификации, и зачем он вобще нужен. Напомню, что данную аутентификацию лучше не использовать там где нужно реально защитить важную информацию. Если ты уважаемый читатель еще не разобрался с тем как настраивать файлы паролей и групп, предлагаю тебе скачать их в готовом виде:

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


Спасибо: http://lifeexample.ru/razrabotka-i-optimizacia-saita/htaccess-zapretit-dostup.html

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

HTTP Authentication с PHP как FastCGI/SuExec | | 2014-03-11 14:31:34 | | Статьи Web-мастеру | | HTTP Authentication с PHP как FastCGI/SuExec 10 Июнь 2011 Однако, есть обходной путь, который покажет как сделать HTTP-авторизацию для PHP так-же как и для CGI. Если скрипт постоянно выдает форму | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: