我见过许多脚本将会话与cookie混合在一起,并有两个会话名称,用户名或ID和会话ID。
这安全吗?:
if ($this->login($username, $password))
{
// everything works..
$_SESSION['name'] = $username;
}
为什么需要生成新的会话ID?为什么要把饼干和它混在一起?为了防止大多数攻击,最好的方法是什么?
会话通常被认为是安全的,如果您使用session_regenerate_id()
,尤其是如果您使用HTTPS。
其他所有安全问题都取决于您的代码(->处理数据的方式):
- 用户输入
- 如何存储数据(pw/email)
- 如何保持用户登录
- 如何传递信息
- 您为每个唯一的用户生成会话id,因此不会共享任何数据
- 您使用cookie可以使用透明会话。因此,您不必在每个URL中传递会话id
- 阅读此帖子中的一些评论
好的,会话安全在现实中是一个相当复杂的问题,因为有很多事情需要考虑。
首先,您需要考虑会话数据本身是如何存储的。默认情况下,PHP将会话数据存储在web服务器上的文件中。如果你有专门的托管,这是完全可以接受的,但是共享托管计划偶尔(意外)会授予服务器上其他托管帐户的用户访问该会话数据的权限。您可以覆盖默认会话行为以写入数据库或您自己保护的位置,但是,我不会在这个答案中详细介绍这一点。
其次,你必须考虑会话盗窃。您必须确保您的会话使用cookie,而不是更危险的基于url的选项。然后,我会创建第二个cookie来存储用户数据,这些数据在正常会话条件下应该保持不变。这不应该是一个IP地址,因为它可能会更改。但是,用户不应该在会话期间更改浏览器,因此他们的用户代理应该做得很好。如果你将其与系统中的私人数据(用户id等)结合起来,然后对其进行哈希处理,那么你就有一些额外的数据需要检查,攻击者几乎无法猜测。
如果确保您使用的是SSL连接,并且在登录时重新生成会话id,那么您应该拥有一个安全的系统。我确实觉得我错过了一些东西,但我会保持简短和甜蜜,让你继续研究。
希望这能有所帮助,
Ryan