Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 530

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/cache.php on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/theme.php on line 623
Простая аутентификация в CakePHP - Программируем на CakePHP


Сен 02 2008

Простая аутентификация в CakePHP

Раздел: Веб-разработкаМета @ 22:54

Очень часто при разработке простых проектов нужно быстро подключить простую аутентификацию для запроса логина-пароля при попытке доступа к определенным страничкам сайта. Например, нужно закрыть от общего доступа временную администраторскую панель или запаролить секретную страничку. Это можно сделать с помощью компонента ValidationComponent. Его необходимо сохранить в папку app/controllers/components/ вашего проекта под именем validation.php.

<?
class ValidationComponent extends Object {

function doAuth() {

$users = array(’user1′=>’pass1′,’user2′=>’pass2′);

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) && isset($users[$_SERVER['PHP_AUTH_USER']]) && ($users[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW'])) $allowed = 1;

if (!isset($allowed) || ($allowed <> 1)) {
header(’WWW-Authenticate: Basic realm=”Auth page. Dont forget to change this string for each your project.”‘);
header(’HTTP/1.0 401 Unauthorized’);
echo ‘Access DENIED!!!’;
exit;
}

}

}
?>

Компонент содержит всего одну функцию — doAuth(), при вызове которой браузер пользователя выведет стандартную форму запроса логина и пароля. Обратите внимание на массив $users — в нем надо задать логины и пароли пользователей, которым будет разрешен вход. Также не забудьте изменить текст строки «Auth page. Dont forget to change this string for each your project.». Для каждого проекта эта строка должна быть уникальной! Иначе пользователь, залогинившись на одном сайте, сможет заходить на странички другого сайта с такой же строкой без необходимости ввода логина и пароля!

Как использовать этот компонент? Очень просто. В заголовке контроллера, функции которого надо защитить, добавляем:

var $components = array(’Validation’);

Затем первой строкой в функции, доступ к которой должен быть ограничен (например, admin_edit), пишем:

$this->Validation->doAuth();

И все. При попытке зайти на страничку, соответствующую этой функции браузер запросит пароль.

Недостатков у такого метода защиты довольно много. Используется стандартная Basic-аутентификация, при которой и логин, и пароль передаются по сети без шифрования, открытым текстом. Кроме того, передаются они при каждом запросе к сайту, поэтому возможность перехвата во много раз возрастает. Нет ограничения на количество попыток доступа — существует опасность получения пароля простым перебором. Логины и пароли хранятся в файле компонента открытым текстом — при взломе ftp-сервера сайта злоумышленник их без проблем получит.

Перечисленные недостатки легко устраняются, но значительно усложняют компонент. Более совершенная версия будет опубликована отдельно. Также отдельно я опишу альтернативные решения по аутентификации и встроенную в CakePHP систему.

Приведенный здесь ValidationComponent — для самых простых вещей, когда надо сделать быстро.

Теги: , ,

2 Responses to “Простая аутентификация в CakePHP”

  1. SimpleAcl — простой компонент для авторизации и проверки прав пользователей - Программируем на CakePHP says:

    [...] доступ к админке, мы в своей студии используем простой ValidationComponent, единственное что модифицированный под использование [...]

  2. Николай says:

    или можно сделать вот такой app_controller
    params['admin']) and $this->layout == “default”) {
    $this->Validation->doAuth();
    $this->layout = ‘admin’;
    }
    }
    }
    ?>

Напиши комментарий!