Http basic Authorization — различия между версиями
Mad grant (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9.5''' == Задача == Закрыть страницу /admin дополнительной http авторизаци…») |
Alexei (обсуждение | вклад) |
||
(не показано 9 промежуточных версий 2 участников) | |||
Строка 16: | Строка 16: | ||
Потом создайте в корневой директории папку "security" и положите в нее: | Потом создайте в корневой директории папку "security" и положите в нее: | ||
− | 1) файл .htpasswd, о том как его получить можно прочитать, например, вот | + | 1) файл .htpasswd, о том как его получить и заполнить данными можно прочитать, например, вот [http://ru.wikipedia.org/wiki/Htpasswd здесь]. |
− | 2) .htaccess следующего содержания: | + | 2) файл .htaccess следующего содержания: |
<source lang="apache"> | <source lang="apache"> | ||
− | + | AuthType Basic | |
− | + | AuthName "private area" | |
+ | AuthUserFile /home/domains/c-cmac/htdocs/security/.htpasswd | ||
+ | require valid-user | ||
</source> | </source> | ||
+ | |||
+ | *в AuthName укажите желаемое сообщение в форме авторизации. | ||
+ | *в AuthUserFile укажите абсолютный путь до файла .htpasswd, см. 1). | ||
+ | |||
+ | 3) php файл check.php следующего содержания: | ||
+ | |||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | include '../standalone.php'; | ||
+ | |||
+ | $buffer = new HTTPOutputBuffer; | ||
+ | $buffer->redirect("/admin/news/lists/", '301 Moved Permanently', 301); | ||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | Тогда, при запросе имя_вашего_сайта/admin, браузер затребует ввести авторизационные данные, если они будут введены верно, то произойдет редирект на стандартную форму авторизации в административную панель UMI.CMS. | ||
+ | |||
+ | [[Файл:Basic_http_auth.png]] | ||
+ | |||
+ | Если Вы не хотите, еще раз вводить те же данные, то можете внести правки в файл check.php: | ||
+ | |||
+ | <source lang="php"> | ||
+ | include '../standalone.php'; | ||
+ | |||
+ | $login = $_SERVER['PHP_AUTH_USER']; | ||
+ | $pass = $_SERVER['PHP_AUTH_PW']; | ||
+ | |||
+ | $buffer = new HTTPOutputBuffer; | ||
+ | $buffer->redirect("/admin/news/lists/?u-login=$login&u-password=$pass", '301 Moved Permanently', 301); | ||
+ | </source> | ||
+ | |||
+ | *Из-за особенностей архитектуры UMI.CMS второй версии полноценно закрыть всю административную панель этим способом не получится, но можно хотя бы закрыть самый очевидный адрес /admin. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | Иногда из-за особенностей хостинга данный способ может не сработать, тогда можно дополнительно закрыть административную панель паролем, заменив код в файле check.php на следующий: | ||
+ | |||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | include '../standalone.php'; | ||
+ | |||
+ | $login = 'admin'; | ||
+ | $pass = '4297f44b13955235245b2497399d7a93'; // md5 123123 | ||
+ | |||
+ | if (!isset($_COOKIE['test_umi'])){ | ||
+ | if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) { | ||
+ | // Имя пользователя и/или пароль не были введены, поэтому отправляются заголовки аутентификации | ||
+ | header('HTTP/1.1 401 Unauthorized'); | ||
+ | header('WWW-Authenticate: Basic Realm="test-umi"'); | ||
+ | exit('Вам необходимо ввести правильные имя пользователя и пароль, '. | ||
+ | 'иначе вы не получите доступ к этой странице'); | ||
+ | } | ||
+ | |||
+ | // Получение введенных пользователем данных для аутентификации | ||
+ | $user_userlogin = trim($_SERVER['PHP_AUTH_USER']); | ||
+ | $user_password = md5(trim($_SERVER['PHP_AUTH_PW'])); | ||
+ | |||
+ | if ($login == $user_userlogin && $pass == $user_password ) { | ||
+ | // Процедура входа прошла нормально, дальше что-то делаем. | ||
+ | $sessionId = md5(time()); | ||
+ | setcookie('test_umi', $sessionId, time() + (60 * 60 * 24 * 30)); | ||
+ | $_COOKIE['test_umi'] = $sessionId; | ||
+ | } else { | ||
+ | // Имя пользователя и/или пароль введены неверно, поэтому отправляются заголовки аутентификации | ||
+ | header('HTTP/1.1 401 Unauthorized'); | ||
+ | header('WWW-Authenticate: Basic Realm="test-umi"'); | ||
+ | exit('Вам необходимо ввести правильные имя пользователя и пароль, '. | ||
+ | 'иначе вы не получите доступ к этой странице'); | ||
+ | } | ||
+ | } | ||
+ | header("Location: http://domain.ru/admin/news/lists"); | ||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | где 'admin' - это нужный пароль, '4297f44b13955235245b2497399d7a93' - пароль зашифрованный в md5, 'domain.ru' - адрес Вашего сайта. | ||
[[category:.htaccess]] | [[category:.htaccess]] |
Текущая версия на 15:51, 12 февраля 2016
Актуально для версии 2.9.5
Задача
Закрыть страницу /admin дополнительной http авторизацией.
Решение
Для решения задачи в .htaccess добавьте строку:
RewriteCond %{REQUEST_URI} ^(/admin)$
RewriteRule ^(.) /security/check.php [L,R]
Потом создайте в корневой директории папку "security" и положите в нее:
1) файл .htpasswd, о том как его получить и заполнить данными можно прочитать, например, вот здесь.
2) файл .htaccess следующего содержания:
AuthType Basic
AuthName "private area"
AuthUserFile /home/domains/c-cmac/htdocs/security/.htpasswd
require valid-user
- в AuthName укажите желаемое сообщение в форме авторизации.
- в AuthUserFile укажите абсолютный путь до файла .htpasswd, см. 1).
3) php файл check.php следующего содержания:
<?php
include '../standalone.php';
$buffer = new HTTPOutputBuffer;
$buffer->redirect("/admin/news/lists/", '301 Moved Permanently', 301);
?>
Тогда, при запросе имя_вашего_сайта/admin, браузер затребует ввести авторизационные данные, если они будут введены верно, то произойдет редирект на стандартную форму авторизации в административную панель UMI.CMS.
Если Вы не хотите, еще раз вводить те же данные, то можете внести правки в файл check.php:
include '../standalone.php';
$login = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
$buffer = new HTTPOutputBuffer;
$buffer->redirect("/admin/news/lists/?u-login=$login&u-password=$pass", '301 Moved Permanently', 301);
- Из-за особенностей архитектуры UMI.CMS второй версии полноценно закрыть всю административную панель этим способом не получится, но можно хотя бы закрыть самый очевидный адрес /admin.
Иногда из-за особенностей хостинга данный способ может не сработать, тогда можно дополнительно закрыть административную панель паролем, заменив код в файле check.php на следующий:
<?php
include '../standalone.php';
$login = 'admin';
$pass = '4297f44b13955235245b2497399d7a93'; // md5 123123
if (!isset($_COOKIE['test_umi'])){
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
// Имя пользователя и/или пароль не были введены, поэтому отправляются заголовки аутентификации
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic Realm="test-umi"');
exit('Вам необходимо ввести правильные имя пользователя и пароль, '.
'иначе вы не получите доступ к этой странице');
}
// Получение введенных пользователем данных для аутентификации
$user_userlogin = trim($_SERVER['PHP_AUTH_USER']);
$user_password = md5(trim($_SERVER['PHP_AUTH_PW']));
if ($login == $user_userlogin && $pass == $user_password ) {
// Процедура входа прошла нормально, дальше что-то делаем.
$sessionId = md5(time());
setcookie('test_umi', $sessionId, time() + (60 * 60 * 24 * 30));
$_COOKIE['test_umi'] = $sessionId;
} else {
// Имя пользователя и/или пароль введены неверно, поэтому отправляются заголовки аутентификации
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic Realm="test-umi"');
exit('Вам необходимо ввести правильные имя пользователя и пароль, '.
'иначе вы не получите доступ к этой странице');
}
}
header("Location: http://domain.ru/admin/news/lists");
?>
где 'admin' - это нужный пароль, '4297f44b13955235245b2497399d7a93' - пароль зашифрованный в md5, 'domain.ru' - адрес Вашего сайта.