会话是否可由客户/用户修改?

时间:2010-05-27 23:37:38

标签: php security session

在我的PHP Web-App中,我使用会话来存储用户的数据。例如,如果用户登录,则会生成User类的实例并将其存储在Session中。

我有与每个用户关联的访问级别以确定他们的权限。

通过以下方式将用户存储在会话中:

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

例如:

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

其中getAccessLevel()只是User类中的get方法,它返回_accesslevel成员变量。

这样安全吗?或者客户端可以通过某种会话操作以某种方式修改其访问级别吗?

3 个答案:

答案 0 :(得分:2)

不,客户端无法修改其访问级别。存储在客户端上的唯一东西是会话密钥,它通过cookie或GET参数传播。会话密钥与相应的会话记录相关联,该记录是存储在服务器端(通常在临时目录中)的文件,其中包含“punch”。 您不想要的是会话密钥泄露给第三方:

  

泄露的会话ID启用第三个   派对访问所有资源   与特定的ID相关联。

看看这个:http://www.php.net/manual/en/session.security.php

答案 1 :(得分:1)

会话信息存储在服务器上,用户只能访问密钥。在实践中,我使用了这种类型的东西,还有额外的步骤。验证用户详细信息并存储User对象后,我会在查看任何受保护的页面时运行查询,以验证会话中的内容是否正常,以及他们要查看的内容。 在你的page.php的顶部

if(!validUser($user)){ 
   // Relocate the user
}

,其中

validUser(User $user)
{
   // Some query to verify the information in the session
   // Return the results of verification
}

答案 2 :(得分:0)

我认为用户操作类似内容的唯一方法是将其存储在用户计算机上的cookie中。

getaccesslevel是存储到cookie还是仅在检查登录cookie后才从服务器调用,而不是存储在用户计算机上?

我认为如果只有在用户登录后才在服务器上调用它,那么除了通过其他安全漏洞之外,他们将无法轻易地操纵它。

只是我的猜测,我自己的安全性还不是那么好。我会密切关注这一点,看看别人怎么说,也许我可以学到一些东西。