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