使用session_id的会话安全性

时间:2012-08-23 00:08:58

标签: php security session

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

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

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

1 个答案:

答案 0 :(得分:3)

不,检查session_id与存储在DB中的session_id是没有好处的。如果会话被劫持,则意味着劫持者具有会话ID。因此,对数据库进行检查只会发现劫持者具有有效的会话令牌。

你可以像noko说的那样检查IP,但那时你需要存储其他东西以及你需要在每个请求上做的其他事情。检查用户代理是没有意义的。

你可以做的最好的事情是防止会话劫持:

  1. 在用户登录后,使用TLS / SSL作为登录表单和每个页面。 理想情况下,将它用于一切都是最好的。
  2. 在用户登录后轮换您的会话令牌。如果用户的session_id在登录前遭到入侵,则在登录后仍会受到影响。
  3. 确保使用足够随机的会话令牌。这将使他们难以猜测并且会对您的会话管理进行非常非常困难的暴力攻击。
  4. 更新:详细说明#3(根据要求)我将引用并引用OWASP Session Management Cheat Sheet

      

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

      

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