何时以及为何应使用 session_regenerate_id()?

2022-08-30 07:33:06

为什么以及何时应该在php中使用该函数?我应该在使用后始终使用它吗?我已经读到我必须用它来防止会话固定,这是唯一的原因吗?session_regenerate_id()session_start()


答案 1

什么?session_regenerate_id()

正如函数名称所说,它是一个将当前会话ID替换为新会话ID并保留当前会话信息的函数。

它有什么作用?

它主要有助于防止会话固定攻击。会话固定攻击是指恶意用户试图利用系统中的漏洞来固定(设置)另一个用户的会话 ID (SID)。通过这样做,他们将以原始用户的身份获得完全访问权限,并能够执行需要身份验证的任务。

要防止此类攻击,请在用户成功登录时使用(或为每个 X 个请求)分配一个新的会话 ID。现在只有他有会话 ID,并且您的旧(固定)会话 ID 不再有效。session_regenerate_id()

我应该什么时候使用?session_regenerate_id()

正如 symbecean 在下面的注释中指出的那样,会话 ID 必须在身份验证状态的任何转换中更改,并且只能在身份验证转换时更改。

延伸阅读:


答案 2

我认为会话中毒的问题已经得到了很好的解决。

要回答“何时应使用此内容?”部分,请务必退后一步,考虑应用程序对会话执行的操作。或者,换句话说,这是您需要回答的关键安全问题

如果有人拿到了这次会议,他们会得到什么?

如果您所做的只是跟踪其他匿名数据(用户来到网站并使用它来跟踪他们的访问),那么就没有理由重新生成会话。劫机者不会通过抓住该会话获得任何有价值的东西。

但是,许多网站都提供登录信息。登录会改变很多事情。我可以访问我的个人资料。我可以更改设置。因此,劫机者可能希望我的帐户访问权限, 特别是如果普通用户和管理员用户都使用会话来管理登录.因此,当人们来到我的网站并登录时,我会重新生成会话。它增加了一层额外的安全,我的新登录用户不太可能被劫持。

每当我们将关键数据添加到会话时,您都应该考虑重新生成会话 ID。如果您需要强化应用程序以防止固定,那么随机再生可能很有用,但我永远不会在每个请求时重新生成。默认情况下,PHP 将会话存储在本地磁盘上的文件中。您正在添加大量磁盘 I/O 来缓解相对较小的攻击媒介。如果你真的需要更多的安全性,我会提倡使用完整的HTTPS而不是定期重新生成(HTTPS使固定很难实现)。


推荐