我正在处理登录脚本。当用户成功登录时,我设置了$_SESSION['logged_in'] = TRUE;
然后,我只是检查其他页面$_SESSION['logged_in'] = TRUE;
如果是,我会显示相应的内容
一切正常,但现在我正在增加更多安全性。登录后,根据存储在数据库中的session_id
检查当前用户的session_id
是否有益?这有助于防止会话劫持吗?如果没有,我应该采取其他预防措施吗?
答案 0 :(得分:3)
不,检查session_id与存储在DB中的session_id是没有好处的。如果会话被劫持,则意味着劫持者具有会话ID。因此,对数据库进行检查只会发现劫持者具有有效的会话令牌。
你可以像noko说的那样检查IP,但那时你需要存储其他东西以及你需要在每个请求上做的其他事情。检查用户代理是没有意义的。
你可以做的最好的事情是防止会话劫持:
更新:详细说明#3(根据要求)我将引用并引用OWASP Session Management Cheat Sheet
会话ID必须足够长,以防止暴力攻击, 攻击者可以通过整个ID值范围和 验证是否存在有效会话。会话ID长度必须是 至少128位(16字节)。
和
会话ID必须是不可预测的(足够随机)以防止 猜测攻击,攻击者能够猜测或预测ID 通过统计分析技术进行有效会话。为了这 目的,必须使用一个好的PRNG(伪随机数发生器)。 会话ID值必须提供至少64位的熵(如果a 使用了良好的PRNG,这个值估计是长度的一半 会话ID)。