首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP会话劫持

PHP会话劫持
EN

Stack Overflow用户
提问于 2011-10-17 05:23:48
回答 3查看 618关注 0票数 0

可能重复:

PHP Session Fixation / Hijacking

我一直在大量地使用$_SESSION superglobal。

然而,情况是这样的:

一旦用户被记录下来,我想要跟踪他的ID(MySQL表)。我可以轻松地将id插入到$_SESSION['id'] = $user_id;中。

毕竟,我可以在我的站点上的页面上使用这个变量。我的想法是-用户可以欺骗另一个ID。如果我看到有一个简单的数字,那么我可以稍微修改一下,看看会发生什么--我想防止这种情况发生,因为它可能会造成很多问题,因为用户ID将用于在数据库中添加、删除和编辑条目。

session_regenerate_id()是否足以保证我的会话不被劫持?

结论: Cookie只存储会话标识符-所有值都在服务器上,永远不会传递给客户端。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-17 05:31:06

用户没有访问$_SESSION['id']的权限。他无法修改保存在您服务器上的变量(请参阅session文档)。

session_regenerate_id()有一个不同的目的。它重置cookie SID。这就是区分用户和会话的句柄。只有当您有辅助标识符(IP或用户代理字符串)要验证时,才有意义使用。它的主要目的是防止陈腐或交叉的会议。再看一遍手册。

票数 1
EN

Stack Overflow用户

发布于 2011-10-17 05:28:16

如果我是您,我将在您的数据库中有一个存储user_id和session_hash的表。也可能是date_expires。然后,当用户登录时,根据他们的id (或者随机盐)创建一个散列,将其存储在数据库和会话变量中。这样,如果他们改变了自己的值,就不太可能匹配数据库中的其他存储值。同时,如果用户在他们的帐户上执行任何操作,您只需检查数据库表中的哈希以获取他们的真实id,然后按照通常的方式执行该操作。

票数 1
EN

Stack Overflow用户

发布于 2011-10-17 05:30:03

一个选项是对其进行散列,然后在数据库中使用相同的哈希。

示例:

代码语言:javascript
复制
$_SESSION['id'] = md5($user_id);

$query = "SELECT * from database_table where md5(database_table.user_id) = " . $_SESSION['id'];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7789680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档