0

我见过许多混合会话的脚本,带有 cookie,并且有两个会话名称,用户名或 ID 和会话 ID。

这安全吗?:

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

为什么需要生成新的 Session ID?为什么要混合饼干呢?以及防止大多数攻击的最佳方法是什么?

4

3 回答 3

0

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

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

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

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

希望这有所帮助,

瑞安

于 2013-07-19T12:51:14.607 回答
0

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

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

  • 用户输入
  • 您如何存储数据(密码/电子邮件)
  • 你如何让用户保持登录状态
  • 你如何传递信息
  • ..
于 2013-07-19T12:23:57.660 回答
0
  1. 您为每个唯一用户生成会话 ID,因此不会共享任何数据!
  2. 您使用 cookie 能够使用透明会话。所以你不必在每个 URL 中传递会话 id
  3. 阅读此线程中的一些评论
于 2013-07-19T12:17:29.340 回答