会话数据可见;好吗?

时间:2011-07-13 10:46:28

标签: php security session

用户可以查看会话中保存的数据吗?例如,如果用户登录到网站,并且他的user_id被保存在会话中,那么只要用户的ID在会话中可用,用户就会保持登录状态。他能查看会话数据吗?如果他能看,那不好吗? 对不起,如果我的问题听起来很愚蠢,但我有一个问题,我一整天都想解决这个问题:

我正在使用闪存上传器,当我将数据发送到另一个页面时,闪存上传器丢失数据,我无法从会话中获取数据,正如我在my previous question中所说的那样。由于发送session_id并未解决我的问题,因此我想将会话中存储的user_id与其他数据一起传递,并且当后端脚本获得user_id时,再次将其存储在会话中,以便用户保持登录状态。 例如,我可以使用javascript(uploadify语法)发送user_id

'scriptData'     : {'uid': '<?=$this->session->userdata('uid')?>'},

在后端脚本上,我可以通过以下方式获取user_id

$uid = $_REQUEST['sid'];
var_dump($uid);

现在,由于我使用javascript将user_id发送到后端脚本,因此用户可以非常轻松地看到他的user_id正在传递。我怀疑它是否非常不安全?用户可以以某种方式更改用户ID并发送它(并以另一个用户身份登录吗?)是否可能?

另一种可能的方法是传递session_id而不是用户ID(我暂时无法做到),发送session_id比发送user_id更安全吗?

3 个答案:

答案 0 :(得分:3)

你永远不应该发送user_id。这将是您应用中的一个巨大安全漏洞,因为用户可以将其更改为入侵其他用户帐户。

您应该发送session_id,然后在服务器端执行此操作:

<?php session_id($_GET['session_id']); ?>

这将启动该会话。

是的,在会话中存储数据是安全的。

http://php.net/manual/en/function.session-id.php

答案 1 :(得分:1)

如果您的user_id以任何方式可预测,那么用户可以查看并更改其user_id,这将使您的网站认为它是另一个用户。然后,他们可以访问他们模仿的用户的信息。

这可能是严重违反用户安全的行为。

答案 2 :(得分:0)

不,他们无法查看会话中存储的数据。

会话ID仅指服务器上的会话数据,因此如果您传递session_id,则会话中存储的数据是安全的。

请注意,您不应公开user_id,因为它提供了更改它的机会。