Действительно ли сессии являются модифицируемыми клиентом/пользователем?

В моем Веб-приложении PHP я использую сессии, чтобы хранить данные пользователя. Для экс-клена, если пользователь входит в систему, то экземпляр Пользовательского класса сгенерирован и сохранен на Сессии.

Мне связали уровни доступа с каждым пользователем для определения их полномочий.

Сохраните пользователя на сессии:

$_SESSION['currentUser'] = new User($_POST['username']);

Например:

if($_SESSION['currentUser'] -> getAccessLevel() == 1)
{
  //allow administration functions
}

где getAccessLevel () является просто получить методом в Пользовательском классе, который возвращает _accesslevel членскую переменную.

Это безопасно? Или клиент может так или иначе изменить их уровень доступа посредством какого-то управления сессией?

5
задан Sev 27 May 2010 в 23:37
поделиться

3 ответа

Нет, клиент не может изменить свой уровень доступа. Единственное, что хранится на клиенте, это ключ сессии, который передается либо через cookie, либо через GET-параметр. Ключ сессии связан с соответствующей записью сессии, которая представляет собой файл, хранящийся на стороне сервера (обычно в каталоге temp), который содержит "удар". Чего вы не хотите, так это утечки сеансового ключа третьей стороне:

Утечка сеансового идентификатора позволяет третьей стороне получить доступ ко всем ресурсам, к которым она имеет доступ. третьей стороне получить доступ ко всем ресурсам, которые связанные с определенным идентификатором.

Взгляните на это: http://www.php.net/manual/en/session.security.php

2
ответ дан 15 December 2019 в 06:17
поделиться

Информация о сессии хранится на сервере, а пользователь имеет доступ только к ключу. На практике я использовал нечто подобное, но с дополнительными шагами. После проверки данных пользователя и сохранения объекта 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
}
1
ответ дан 15 December 2019 в 06:17
поделиться

Я думал, что единственный способ для пользователя манипулировать чем-то подобным - это если это будет сохранено в файле cookie на компьютере пользователя.

Сохраняется ли уровень getaccesslevel в cookie или он вызывается с сервера только после проверки cookie входа и не сохраняется на компьютере пользователя?

Я бы предположил, что если он вызывается на сервере только после того, как пользователь войдя в систему, они не смогут легко манипулировать этим, кроме как через другие средства дыр в безопасности.

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

0
ответ дан 15 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: