1

在阅读了一篇关于 PHP 会话安全的精彩文章后。我在讨论中有两个问题。

1)$_SERVER['HTTP_USER_AGENT'] - 这会获取有关用户浏览器和其他详细信息的信息,并且由于一个人可以从另一台计算机访问他们的帐户,那么它有什么用处?

2)session_regenerate_id - 这会重新生成一个会话 id,我应该如何使用它?会话超时或关闭后是否删除了 session_id?

感谢您的所有帮助。我感谢每一个观点和回应。

4

4 回答 4

4

$_SERVER['HTTP_USER_AGENT'] ,当您使用可能不适用于所有人的特殊功能时,或者如果他们想了解他们的目标受众时,您可以使用此信息。这在使用 get_browser() 函数查找有关浏览器功能的更多信息时也很重要。通过获得这些信息,用户可以被引导到最适合他们浏览器的网站版本。

session_regenerate_id,当它重命名会话 id 时,它不会删除旧会话,使其保持活动状态并可能被黑客使用。如果该功能仅在新会话创建期间用作防止会话固定的方法,这不会造成问题,顺便说一句,这是预期用途。但是,如果在每个基于会话的请求上使用它来防止通过 HTTP_REFERER 和类似的会话泄漏,它就完全没用了,因为之前的会话 id 仍然可用。这也意味着将“actions”上的 id 更改为一些脚本来防止会话盗窃也是没有意义的;事实上,它使同一用户的会话 ID 数量翻了一番,从而更容易假设他们的身份。

于 2010-12-09T20:05:17.217 回答
3

User-Agent 对于确定正在使用的浏览器很有用,这可能会导致猜测它的某些功能。例如,大多数移动设备都可以通过浏览器的用户代理(请参阅WURFL)准确识别,从而允许网站的开发人员将移动设备定向到网站的移动版本。

但是,它可以由用户修改,因此它的值应该与任何用户输入的情况一样。

session_regenerate_id()不会删除会话。它只是将其 id 更改为新创建的。为避免其旧会话文件一直挂起,直到系统自动删除,您可以通过将可选函数参数设置为自行删除它true。它的用途是避免会话固定攻击,在这种攻击中,攻击者可以通过知道并将其 id 提供给服务器来访问现有会话的数据。

于 2010-12-09T20:08:47.987 回答
3

1)会话不绑定到帐户,它们绑定到浏览器会话。您可以使用用户代理信息来查看其他用户代理是否试图劫持会话。然而,它不是万无一失的。您还可以使用诸如用户的 IP 地址(或其给定范围)之类的东西来捕获劫持尝试。

session_regenerate_id2)通过不时调用,您可以减少有人劫持会话的机会。如果会话 ID 在 URL 中传递,则尤其如此。例如,假设有人不小心粘贴了一个链接,该链接指向带有 URL 中 SID 的聊天。如果您定期重新生成会话 ID,则看到该链接的用户无法使用它劫持会话,因为 ID 已经更改。

于 2010-12-09T20:09:52.930 回答
1

我将尝试自下而上回答您的问题: session_regenerate_id() 在防止会话固定攻击方面很有用,在这种攻击中,获得您的会话 ID 的恶意用户劫持了您的会话,然后可以充当您。当您重新生成会话时,您可以跟踪数据库中的最新会话 ID 或类似的东西,并且只允许使用最新的会话 ID 进行访问(顺便说一下,如果您足够频繁地重新生成 sessid,这将阻止用户以多个browsers/windows),否则默认情况下旧会话将可用(除非您将布尔值 true 参数传递给 session_regenerate_id 函数调用)。

一些安全狂热的人会建议在每次请求后重新生成会话 ID,但您也可以跟踪每个请求递增的会话变量,并且只需重新生成每 X 个请求(5 或 10 或任何您认为对您来说足够数量的请求)安全级别)。另一种选择是在特权升级期间重新生成会话 ID,例如登录。

至于 HTTP_USER_AGENT,它主要用于实现浏览器/客户端特定的功能(例如,当用户使用 Firefox 或 IE 访问您的站点时显示“Get Chrome!”链接)。

于 2010-12-09T20:15:15.753 回答