在我的PHP Web-App中,我使用会话来存储用户的数据。例如,如果用户登录,则会生成User类的实例并将其存储在Session中。
我有与每个用户关联的访问级别以确定他们的权限。
通过以下方式将用户存储在会话中:
$_SESSION['currentUser'] = new User($_POST['username']);
例如:
if($_SESSION['currentUser'] -> getAccessLevel() == 1)
{
//allow administration functions
}
其中getAccessLevel()只是User类中的get方法,它返回_accesslevel成员变量。
这样安全吗?或者客户端可以通过某种会话操作以某种方式修改其访问级别吗?
答案 0 :(得分:2)
不,客户端无法修改其访问级别。存储在客户端上的唯一东西是会话密钥,它通过cookie或GET参数传播。会话密钥与相应的会话记录相关联,该记录是存储在服务器端(通常在临时目录中)的文件,其中包含“punch”。 您不想要的是会话密钥泄露给第三方:
泄露的会话ID启用第三个 派对访问所有资源 与特定的ID相关联。
答案 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后才从服务器调用,而不是存储在用户计算机上?
我认为如果只有在用户登录后才在服务器上调用它,那么除了通过其他安全漏洞之外,他们将无法轻易地操纵它。
只是我的猜测,我自己的安全性还不是那么好。我会密切关注这一点,看看别人怎么说,也许我可以学到一些东西。