只使用会话登录是否安全


Is it secure to have login with just sessions?

我见过许多脚本将会话与cookie混合在一起,并有两个会话名称,用户名或ID和会话ID。

这安全吗?:

    if ($this->login($username, $password))
    {
        // everything works..
        $_SESSION['name'] = $username;
    }

为什么需要生成新的会话ID?为什么要把饼干和它混在一起?为了防止大多数攻击,最好的方法是什么?

会话通常被认为是安全的,如果您使用session_regenerate_id(),尤其是如果您使用HTTPS。

其他所有安全问题都取决于您的代码(->处理数据的方式):

  • 用户输入
  • 如何存储数据(pw/email)
  • 如何保持用户登录
  • 如何传递信息
  1. 您为每个唯一的用户生成会话id,因此不会共享任何数据
  2. 您使用cookie可以使用透明会话。因此,您不必在每个URL中传递会话id
  3. 阅读此帖子中的一些评论

好的,会话安全在现实中是一个相当复杂的问题,因为有很多事情需要考虑。

首先,您需要考虑会话数据本身是如何存储的。默认情况下,PHP将会话数据存储在web服务器上的文件中。如果你有专门的托管,这是完全可以接受的,但是共享托管计划偶尔(意外)会授予服务器上其他托管帐户的用户访问该会话数据的权限。您可以覆盖默认会话行为以写入数据库或您自己保护的位置,但是,我不会在这个答案中详细介绍这一点。

其次,你必须考虑会话盗窃。您必须确保您的会话使用cookie,而不是更危险的基于url的选项。然后,我会创建第二个cookie来存储用户数据,这些数据在正常会话条件下应该保持不变。这不应该是一个IP地址,因为它可能会更改。但是,用户不应该在会话期间更改浏览器,因此他们的用户代理应该做得很好。如果你将其与系统中的私人数据(用户id等)结合起来,然后对其进行哈希处理,那么你就有一些额外的数据需要检查,攻击者几乎无法猜测。

如果确保您使用的是SSL连接,并且在登录时重新生成会话id,那么您应该拥有一个安全的系统。我确实觉得我错过了一些东西,但我会保持简短和甜蜜,让你继续研究。

希望这能有所帮助,

Ryan