我正在处理登录脚本。当用户成功登录我设置$_SESSION['logged_in'] = TRUE;
然后,我只需检查其他页面,$_SESSION['logged_in'] = TRUE;
如果是的话,我会显示适当的内容
一切正常,但现在我正在添加更多安全性。session_id
登录时检查当前用户与session_id
存储在数据库中的用户是否有益?这是否有助于防止会话劫持?如果没有,我应该采取其他预防措施吗?
不,对照存储在数据库中的 session_id 检查 session_id 是没有好处的。如果会话被劫持,则意味着劫持者拥有会话 ID。因此,根据数据库检查它只会显示劫持者拥有有效的会话令牌。
正如 noko 所说,您可以检查 IP,但那是您需要存储的其他内容,也是您需要针对每个请求执行的其他操作。检查用户代理将毫无意义。
防止会话劫持的最佳方法是:
更新:为了详细说明#3(根据要求),我将引用并参考OWASP 会话管理备忘单
会话 ID 必须足够长以防止暴力攻击,攻击者可以遍历整个 ID 值范围并验证有效会话的存在。会话 ID 长度必须至少为 128 位(16 字节)。
和
会话 ID 必须是不可预测的(足够随机)以防止猜测攻击,攻击者能够通过统计分析技术猜测或预测有效会话的 ID。为此,必须使用良好的 PRNG(伪随机数生成器)。会话 ID 值必须提供至少 64 位的熵(如果使用好的 PRNG,该值估计为会话 ID 长度的一半)。