Http basic Authorization — различия между версиями
Alexei (обсуждение | вклад) |
Alexei (обсуждение | вклад) |
||
Строка 97: | Строка 97: | ||
} | } | ||
} | } | ||
− | header("Location: http:// | + | header("Location: http://domain.ru/admin/news/lists"); |
?> | ?> | ||
</source> | </source> |
Версия 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' - адрес Вашего сайта.