Как защитить панель администратора

Вычитал тут один способ про защиту панели админстратора при помощи кодового слова. Данный метод основан на разрешении доступа к каталогу со скриптами или файлу на основе фрагмента, который содержится в поле User Agent браузера. Как это реализовать в LS? Какой файл отвечает за админку? В папку aceadminpanel я добавил в .htaccess

SetEnvIfNoCase User-Agent .*code.* admins

<Files "\.(php)$">
	order allow,deny
	deny from all
	Allow from env=admins
</Files>


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

17 комментариев

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

if($user->isAdministrator() AND !preg_match('/SECRET_CODE/', $_SERVER['HTTP_USER_AGENT'])) die();
avatar
в каком файле прописать это?
avatar
К примеру classes/modules/user/User.enity.class.php

Если заменить функцию isAdministrator на:
public function isAdministrator() {
	$check = ($this->_getDataOne('user_is_administrator') AND !preg_match('/SECRET_CODE/', $_SERVER['HTTP_USER_AGENT'])) ? false : true;
	return $check;
}

то без нужного узьверьагента не будут предоставлены права администратора

А если заменить на:
public function isAdministrator() {
	$check = $this->_getDataOne('user_is_administrator');
	if($check AND !preg_match('/SECRET_CODE/', $_SERVER['HTTP_USER_AGENT'])) die();
	return $check;
}

то просто получим белый кинескоп. Не испытывал, но должно сработать.
avatar
большое спасибо.
avatar
работает. А можно еще сделать переадресацию на другой сайт например?
avatar
Если у админа нет нужного юзерагента?
avatar
да
avatar
public function isAdministrator() {
	$check = $this->_getDataOne('user_is_administrator');
	if($check AND !preg_match('/SECRET_CODE/', $_SERVER['HTTP_USER_AGENT'])){
 header('location: http://site.com');
 die();
}
	return $check;
}


Не знаю сработает или нет, но думаю принцип понятен.
avatar
класс все работает, огромное спасибо!!!
avatar
Я бы на Вашем месте не по юзерагенту проверял, который может узнать любой злоумышленник, а проверял бы относится или нет IP адрес администратора к населенному пункту указанному в профиле.
avatar
У админов динамические IP. Понятное дело что кому надо тот найдет все что ему нужно.
avatar
тогда эта защита по юзерагенту тоже ничего не даст т.к юзер агент «вытянут» из админов, лучше уже сделать рерайт с урла admin на что-то другое, например, myadmin.

По коду выше:
1. Если делать редирект и «тихо молчать», то можно через отдельный хук, чтобы не редактировать сущность пользователя
2. в целях экономии частого вызова метода использовать вместо preg_matchstrpos
avatar
Это само собой. Так помимо админки, есть же еще админские опции на сайте. Удаление топиков, постов… Идеальная вариант был бы двухэтапная аутентификация по Google Authenticator.
avatar
Можно по пулу IP адресов, что-то типа 152.*.*.*, как минимум если работает с одного провайдера, прокатит.
avatar
Есть замечательная база данных IP адресов SxGeo. Она на любой IP возвращает подробную информацию о населенном пункте Страна->Регион->Город, широта, долгота и т.д. Так вот если у админа в профиле будет указан город или регион, то можно будет сравнивать их с БД на основе IP, т.к. IP не подделаешь. У меня на SxGeo крутиться погодный сервис, т.е. посетитель заходит и на основе его IP ему показывается прогноз по его населенному пункту.
avatar
это хорошо если статический айпи. У меня раньше на ростелекоме был динамический айпи. Так у меня иногда показывало такие города как Москва, Краснодар, Сочи… у них разброс дикий.
На Украине тоже иногда такая фигня бывает, один чел из Киева говорил что у него показал его провайдер Москву.
Так что метод по айпи хорощ для статики.
avatar
Незнаю, у меня всё четко определяет. Напишите свой IP, а я посмотрю по SxGeo какой город покажет.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.