Php 关于保护用户登录安全的建议

Php 关于保护用户登录安全的建议,php,security,Php,Security,我正在使用以下代码进行用户登录。一切正常,但我只是想知道使用这个的安全性。当用户登录时,我使用userid作为sessionid 我使用这个有什么安全问题 用户能否将sessionid更改为其他号码,然后以其他用户身份登录?(我该如何阻止这一切?) 我认为您将会话ID(SID)与您自己的登录ID混淆了,您保存在$\u Session['ID']中 你的代码很好。会话数据保存在服务器上,客户端无法直接操作。因此,他无法更改$\u SESSION['id'](顺便说一句:我建议使用一个更独特的键名,

我正在使用以下代码进行用户登录。一切正常,但我只是想知道使用这个的安全性。当用户登录时,我使用userid作为sessionid

我使用这个有什么安全问题

用户能否将sessionid更改为其他号码,然后以其他用户身份登录?(我该如何阻止这一切?)


我认为您将会话ID(SID)与您自己的登录ID混淆了,您保存在
$\u Session['ID']

你的代码很好。会话数据保存在服务器上,客户端无法直接操作。因此,他无法更改
$\u SESSION['id']
(顺便说一句:我建议使用一个更独特的键名,如
'login\u id'


谈论真正的会话ID(SID)。SID是由PHP自动生成的随机字符串,并保存为客户端机器上的cookie。客户端实际上可以操作他的SID,因此可能会接管不同的会话。这称为会话劫持,它是使用会话的一般问题,而不是代码的特殊问题。查看此处以了解更多信息:

我认为您将会话ID(SID)与您自己的登录ID混淆了,您保存在
$\u Session['ID']

你的代码很好。会话数据保存在服务器上,客户端无法直接操作。因此,他无法更改
$\u SESSION['id']
(顺便说一句:我建议使用一个更独特的键名,如
'login\u id'


谈论真正的会话ID(SID)。SID是由PHP自动生成的随机字符串,并保存为客户端机器上的cookie。客户端实际上可以操作他的SID,因此可能会接管不同的会话。这称为会话劫持,它是使用会话的一般问题,而不是代码的特殊问题。在这里查看更多信息:

我无论如何都不是安全专家

我想说的是,在2010年,关于会话盗窃的事情引起了轩然大波。以至于一个小组推出了一个名为的工具,可以让你在开放的wifi环境下快速窃取其他会话。解决方案是使用SSL保护整个登录会话,或者不在开放网络上。当SSL第一次被使用时,它被证明太慢,无法用作会话长度的安全措施,但现在计算速度已经足够快了

TLDR:如果你不使用SSL,有人可以窃取你的会话。Facebook和谷歌都有同样的问题

为了澄清,他们不能“窃取”会话,因为他们可以找到POST请求中传递的SESSIONID,以便让您登录,然后修改他们的Cookie,将其发送给您。Firesheep工具可以在几秒钟内拦截Facebook登录。通过使用其他人的SESSIONID修改cookie,该工具能够假装为原始用户,允许完全访问登录时解锁的帐户区域。另见:

另一个很好的解决方案是在任何帐户敏感的活动中,不管用户的会话是什么,都要对其进行重新编程。例如,如果他们试图更改密码或更改其他帐户信息,请确保再次询问他们的当前密码


$\u会话服务器端的内容只有在无法以任何方式提交最终会出现在会话变量中的用户数据时才是安全的。如果有人偷了一个SESSIONID,然后在某个表单上输入数据(或者如果您盲目地使用form元素的名称作为$\u会话数组的索引),他们可能会在那里得到一些东西。关键是永远不要相信客户端发送的内容是有效的或可信的。偏执狂是你的朋友。

我无论如何都不是安全专家

我想说的是,在2010年,关于会话盗窃的事情引起了轩然大波。以至于一个小组推出了一个名为的工具,可以让你在开放的wifi环境下快速窃取其他会话。解决方案是使用SSL保护整个登录会话,或者不在开放网络上。当SSL第一次被使用时,它被证明太慢,无法用作会话长度的安全措施,但现在计算速度已经足够快了

TLDR:如果你不使用SSL,有人可以窃取你的会话。Facebook和谷歌都有同样的问题

为了澄清,他们不能“窃取”会话,因为他们可以找到POST请求中传递的SESSIONID,以便让您登录,然后修改他们的Cookie,将其发送给您。Firesheep工具可以在几秒钟内拦截Facebook登录。通过使用其他人的SESSIONID修改cookie,该工具能够假装为原始用户,允许完全访问登录时解锁的帐户区域。另见:

另一个很好的解决方案是在任何帐户敏感的活动中,不管用户的会话是什么,都要对其进行重新编程。例如,如果他们试图更改密码或更改其他帐户信息,请确保再次询问他们的当前密码


$\u会话服务器端的内容只有在无法以任何方式提交最终会出现在会话变量中的用户数据时才是安全的。如果有人偷了一个SESSIONID,然后在某个表单上输入数据(或者如果您盲目地使用form元素的名称作为$\u会话数组的索引),他们可能会在那里得到一些东西。关键是永远不要相信客户端发送的内容是有效的或可信的。“偏执狂”是你的朋友。

因此,如果不使用SSL等,我的代码中就没有多少其他内容可以更改,从而更安全地保护它,让它变得值得一玩?谢谢你的帮助。你可以而且你应该遵循链接答案中的一些建议。执行登录后,至少插入
会话\u重新生成\u id(true)
。这个属
if (!empty($row['member_id']))
     {
    $_SESSION['id'] = $row['member_id'];
    header ("Location: team.php");
    exit();