可能重复:
PHP Session Fixation / Hijacking
我一直在大量地使用$_SESSION superglobal。
然而,情况是这样的:
一旦用户被记录下来,我想要跟踪他的ID(MySQL表)。我可以轻松地将id插入到$_SESSION['id'] = $user_id;中。
毕竟,我可以在我的站点上的页面上使用这个变量。我的想法是-用户可以欺骗另一个ID。如果我看到有一个简单的数字,那么我可以稍微修改一下,看看会发生什么--我想防止这种情况发生,因为它可能会造成很多问题,因为用户ID将用于在数据库中添加、删除和编辑条目。
session_regenerate_id()是否足以保证我的会话不被劫持?
结论: Cookie只存储会话标识符-所有值都在服务器上,永远不会传递给客户端。
发布于 2011-10-17 05:31:06
用户没有访问$_SESSION['id']的权限。他无法修改保存在您服务器上的变量(请参阅session文档)。
session_regenerate_id()有一个不同的目的。它重置cookie SID。这就是区分用户和会话的句柄。只有当您有辅助标识符(IP或用户代理字符串)要验证时,才有意义使用。它的主要目的是防止陈腐或交叉的会议。再看一遍手册。
发布于 2011-10-17 05:28:16
如果我是您,我将在您的数据库中有一个存储user_id和session_hash的表。也可能是date_expires。然后,当用户登录时,根据他们的id (或者随机盐)创建一个散列,将其存储在数据库和会话变量中。这样,如果他们改变了自己的值,就不太可能匹配数据库中的其他存储值。同时,如果用户在他们的帐户上执行任何操作,您只需检查数据库表中的哈希以获取他们的真实id,然后按照通常的方式执行该操作。
发布于 2011-10-17 05:30:03
一个选项是对其进行散列,然后在数据库中使用相同的哈希。
示例:
$_SESSION['id'] = md5($user_id);
$query = "SELECT * from database_table where md5(database_table.user_id) = " . $_SESSION['id'];https://stackoverflow.com/questions/7789680
复制相似问题