PHP 5 - Защита админки сайта - PullRequest
2 голосов
/ 26 июля 2010

В настоящее время я пишу пару сайтов MVC, используя Kohana в качестве моей платформы. Каждый из них имеет простую область администратора, где администратор может загружать и редактировать контент. В настоящее время я храню пользовательскую модель администратора в сеансе и проверяю, являются ли они администратором, используя следующий метод:

private function checkAdmin()
{
    if (!isset($_SESSION['admin']) || $_SESSION['admin']->Level !== 'admin')
    {
        header('Location: /admin');
        exit;
    }
}

Я вызываю этот метод во всех других методах контроллера администратора, например:

public function writeReview()
{
    $this->checkAdmin();

    // rest of the method
}

Мне просто интересно, могу ли я что-нибудь сделать, чтобы улучшить это. Это просто похоже на единственную точку отказа, которая вызывает у меня неприятный запах, поэтому я немного утомлен, чтобы двигаться дальше, прежде чем это прибить.

Ответы [ 3 ]

4 голосов
/ 26 июля 2010

Если это Kohana версии 2.x, я бы переместил $ this-> checkAdmin ();в конструктор вашего контроллера.Если это версия 3.x, я бы добавил ее в метод before ().Это обеспечит защиту каждого маршрута.

3 голосов
/ 26 июля 2010
  1. Ваша функция перенаправляется на /admin, только если пользователь не является администратором. Если это ожидаемый результат, тогда хорошо.

  2. - Забудь об этом, моя ошибка.

  3. Функция checkAdmin(), поскольку она основана на перенаправлении, полезна только в ситуациях, когда вы хотите перенаправить. Если, например, вы используете это в скрипте обработки (и вы должны проверять, является ли он администратором в скрипте обработки), вы просто хотите вернуть true или вернуть false. Я предлагаю, чтобы это была базовая функция и вызов функции перенаправления, или альтернативный, принять и необязательный параметр для перенаправления.

1 голос
/ 01 октября 2010

Если вы хотите, чтобы пользователи могли нормально делиться своими логинами, но в противном случае создание ключа для каждой сессии / логина и сохранение его в БД заблокирует ситуацию еще больше. Таким образом, если кто-то войдет в систему с вашим паролем, вы будете выгнаны и сразу узнаете, что он был взломан.

Другие основные вещи - хранить даты последнего входа в систему, IP-адреса ... такого рода вещи. Это не просто одна вещь, а много! :)

...