【发布时间】:2023-05-06 09:28:01
【问题描述】:
我不确定$_SESSION 在 PHP 中是如何工作的。我假设它是浏览器上的一个 cookie,与服务器上的唯一键相匹配。是否可以伪造并通过仅使用会话来识别用户的登录。
如果 $_SESSION 不能这样工作,有人可能会伪造 cookie 并绕过登录吗?
【问题讨论】:
标签: php
我不确定$_SESSION 在 PHP 中是如何工作的。我假设它是浏览器上的一个 cookie,与服务器上的唯一键相匹配。是否可以伪造并通过仅使用会话来识别用户的登录。
如果 $_SESSION 不能这样工作,有人可能会伪造 cookie 并绕过登录吗?
【问题讨论】:
标签: php
默认情况下,PHP 中的会话将数据存储在服务器上的文件中 (/tmp/),并通常存储标识符 cookie PHPSESSID(它将是一个十六进制数字,例如 f00f8c6e83cf2b9fe5a30878de8c3741)。
如果你有其他人的标识符,那么理论上你可以使用他们的会话。
但是,大多数网站会检查以确保用户代理是一致的,并且还会在每次少量请求时重新生成会话标识符,以缓解这种情况。
至于猜测一个会话,这是可能的,但极不可能。猜测信用卡号码会更容易(较小的字符池(0-9 超过0-9a-f)和验证它的校验和)。当然,您还需要有效期和安全码。
【讨论】:
如果实施得当,会话 ID 非常长且随机,足以让猜测变得不可行(尽管如果您能够猜测特定用户的会话 ID,那么是的,您将充当该用户)。但是你可以嗅探和劫持会话——这就是 firesheep 所做的:http://en.wikipedia.org/wiki/Firesheep
【讨论】:
是的。
识别用户的唯一方法是与每个请求一起发送的伪随机值。 如果攻击者能够猜出要发送的正确值,他就可以伪装成其他人。
有不同的方法可以让这变得更难:
【讨论】: