我不确定$_SESSION
如何在PHP中运行。我假设它是浏览器上的cookie,与服务器上的唯一密钥相匹配。是否可以伪造它并通过仅使用会话来识别用户的登录。
如果$_SESSION
不起作用,有人可能会假冒cookie并绕过登录吗?
答案 0 :(得分:21)
是
识别用户的唯一方法是与每个请求一起发送的伪随机值。 如果攻击者可以猜出要发送的正确值,他可以像其他人一样构成。
有很多方法可以让这更难:
答案 1 :(得分:6)
默认情况下,PHP中的会话将数据存储在服务器上的文件中/tmp
/并存储标识符cookie,通常为PHPSESSID
(它将是十六进制数,例如f00f8c6e83cf2b9fe5a30878de8c3741
)。
如果您有其他人的标识符,那么理论上您可以使用他们的会话。
但是,大多数网站都会检查以确保用户代理是一致的,并且还会为每一些请求重新生成会话标识,以缓解此问题。
至于猜测会话,这是可能的,但极不可能。猜测信用卡号码(较小的字符池(0-9
超过0-9a-f
)和校验和来验证它更容易。当然,您还需要到期和安全代码。
答案 2 :(得分:1)
正确实施,会话ID非常长且随机到足以使猜测变得不可行(尽管如果你能够猜出某个特定用户的会话ID,那么肯定你将扮演该用户的角色)。但是你可以嗅闻和劫持会话 - 这就是firesheep的作用:http://en.wikipedia.org/wiki/Firesheep