В моем Веб-приложении PHP я использую сессии, чтобы хранить данные пользователя. Для экс-клена, если пользователь входит в систему, то экземпляр Пользовательского класса сгенерирован и сохранен на Сессии.
Мне связали уровни доступа с каждым пользователем для определения их полномочий.
Сохраните пользователя на сессии:
$_SESSION['currentUser'] = new User($_POST['username']);
Например:
if($_SESSION['currentUser'] -> getAccessLevel() == 1)
{
//allow administration functions
}
где getAccessLevel () является просто получить методом в Пользовательском классе, который возвращает _accesslevel членскую переменную.
Это безопасно? Или клиент может так или иначе изменить их уровень доступа посредством какого-то управления сессией?
Нет, клиент не может изменить свой уровень доступа. Единственное, что хранится на клиенте, это ключ сессии, который передается либо через cookie, либо через GET-параметр. Ключ сессии связан с соответствующей записью сессии, которая представляет собой файл, хранящийся на стороне сервера (обычно в каталоге temp), который содержит "удар". Чего вы не хотите, так это утечки сеансового ключа третьей стороне:
Утечка сеансового идентификатора позволяет третьей стороне получить доступ ко всем ресурсам, к которым она имеет доступ. третьей стороне получить доступ ко всем ресурсам, которые связанные с определенным идентификатором.
Взгляните на это: http://www.php.net/manual/en/session.security.php
Информация о сессии хранится на сервере, а пользователь имеет доступ только к ключу. На практике я использовал нечто подобное, но с дополнительными шагами. После проверки данных пользователя и сохранения объекта User, я бы сделал запрос, который выполняется при просмотре любой из ваших защищенных страниц, чтобы проверить, что то, что находится в сессии, соответствует тому, что они пытаются просмотреть. В верхней части вашего page.php
if(!validUser($user)){
// Relocate the user
}
where
validUser(User $user)
{
// Some query to verify the information in the session
// Return the results of verification
}
Я думал, что единственный способ для пользователя манипулировать чем-то подобным - это если это будет сохранено в файле cookie на компьютере пользователя.
Сохраняется ли уровень getaccesslevel в cookie или он вызывается с сервера только после проверки cookie входа и не сохраняется на компьютере пользователя?
Я бы предположил, что если он вызывается на сервере только после того, как пользователь войдя в систему, они не смогут легко манипулировать этим, кроме как через другие средства дыр в безопасности.
Я только догадываюсь, что я еще не так хорош в вопросах безопасности. Я буду следить за этим, чтобы увидеть, что говорят другие, и, возможно, я смогу чему-то научиться.