我正在使用以下代码进行用户登录。一切正常,但我只是想知道使用它的安全性。我在用户登录时使用userid作为sessionid。
使用此功能有什么安全问题?
用户可以将sessionid更改为其他号码,然后以其他用户身份登录吗? (我该怎么做呢?)
if (!empty($row['member_id']))
{
$_SESSION['id'] = $row['member_id'];
header ("Location: team.php");
exit();
答案 0 :(得分:1)
我无论如何都不是安全专家。
我想说,2010年有关于会话盗窃的骚动。因此,一个小组推出了一个名为Firesheep的工具,可以让你在开放的无线局域中快速窃取其他会话。解决方案是使用SSL保护整个登录会话,或者不在开放网络上。回到首次使用SSL时,它被证明太慢而无法用作会话长安全措施,但现在计算速度已经足够快。
TLDR:如果您没有SSL,有人可以窃取您的会话。 Facebook和谷歌都有同样的问题。
为了澄清,他们无法“窃取”会话,因为他们可以找到在POST请求中传递的SESSIONID,以便让您保持登录状态,然后修改他们的Cookie以便将其发送给您。 Firesheep工具可以在几秒钟内阻止Facebook登录。通过使用其他人的SESSIONID修改cookie,该工具可以伪装成原始用户,允许完全访问登录时解锁的帐户区域。另见:this。
帮助事情的另一个好方法是在任何帐户敏感活动期间重新提升用户,无论他们的会话如何。例如,如果他们尝试更改密码或更改其他帐户信息,请务必再次询问他们当前的密码。
$ _SESSION服务器端的内容只有在没有办法以任何最终会在会话变量中结束的方式提交用户数据时才是安全的。如果有人偷了一个SESSIONID,然后在某个表单上输入了数据(或者如果你盲目地使用表单元素的名称作为$ _SESSION数组的索引),那么他们可以在那里得到东西。关键是永远不会永远......永远......相信客户方发送的有效或值得信赖的东西。偏执狂是你的朋友。
答案 1 :(得分:0)
我认为您将会话ID(SID)与您自己的登录ID混合,保存在$_SESSION['id']
。
你的代码很好。会话数据保存在服务器上,客户端无法直接操作。所以他无法更改$_SESSION['id']
的值(顺便说一句:我建议使用更加唯一的密钥名称,如'login_id'
)。
谈论真正的会话ID(SID)。 SID是PHP自动生成的随机字符串,并在客户端的计算机上保存为cookie。客户端可以实际操纵他的SID,因此可能会接管不同的会话。这称为会话劫持,这是使用会话的一般问题,代码没有特殊问题。请点击此处了解更多信息:PHP Session Fixation / Hijacking