0

我正在处理登录脚本。当用户成功登录我设置$_SESSION['logged_in'] = TRUE;

然后,我只需检查其他页面,$_SESSION['logged_in'] = TRUE;如果是的话,我会显示适当的内容

一切正常,但现在我正在添加更多安全性。session_id登录时检查当前用户与session_id存储在数据库中的用户是否有益?这是否有助于防止会话劫持?如果没有,我应该采取其他预防措施吗?

4

1 回答 1

3

不,对照存储在数据库中的 session_id 检查 session_id 是没有好处的。如果会话被劫持,则意味着劫持者拥有会话 ID。因此,根据数据库检查它只会显示劫持者拥有有效的会话令牌。

正如 noko 所说,您可以检查 IP,但那是您需要存储的其他内容,也是您需要针对每个请求执行的其他操作。检查用户代理将毫无意义。

防止会话劫持的最佳方法是:

  1. 为您的登录表单和用户登录后的每个页面使用 TLS/SSL。理想情况下,最好将其用于所有内容。
  2. 用户登录后轮换您的会话令牌。如果用户的 session_id 在他们登录之前被泄露,那么在他们登录后它仍然会被泄露。
  3. 确保您使用足够随机的会话令牌。这将使它们难以猜测,并使对您的会话管理的暴力攻击非常非常困难。

更新:为了详细说明#3(根据要求),我将引用并参考OWASP 会话管理备忘单

会话 ID 必须足够长以防止暴力攻击,攻击者可以遍历整个 ID 值范围并验证有效会话的存在。会话 ID 长度必须至少为 128 位(16 字节)。

会话 ID 必须是不可预测的(足够随机)以防止猜测攻击,攻击者能够通过统计分析技术猜测或预测有效会话的 ID。为此,必须使用良好的 PRNG(伪随机数生成器)。会话 ID 值必须提供至少 64 位的熵(如果使用好的 PRNG,该值估计为会话 ID 长度的一半)。

于 2012-08-23T00:40:35.643 回答