【问题标题】:Faking Session/Cookies?伪造会话/Cookie?
【发布时间】:2023-05-06 09:28:01
【问题描述】:

我不确定$_SESSION 在 PHP 中是如何工作的。我假设它是浏览器上的一个 cookie,与服务器上的唯一键相匹配。是否可以伪造并通过仅使用会话来识别用户的登录。

如果 $_SESSION 不能这样工作,有人可能会伪造 cookie 并绕过登录吗?

【问题讨论】:

    标签: php


    【解决方案1】:

    默认情况下,PHP 中的会话将数据存储在服务器上的文件中 (/tmp/),并通常存储标识符 cookie PHPSESSID(它将是一个十六进制数字,例如 f00f8c6e83cf2b9fe5a30878de8c3741)。

    如果你有其他人的标识符,那么理论上你可以使用他们的会话。

    但是,大多数网站会检查以确保用户代理是一致的,并且还会在每次少量请求时重新生成会话标识符,以缓解这种情况。

    至于猜测一个会话,这是可能的,但极不可能。猜测信用卡号码会更容易(较小的字符池(0-9 超过0-9a-f)和验证它的校验和)。当然,您还需要有效期和安全码。

    【讨论】:

    • 任何想法也只是设置cookies?
    • @ultimatebuster 我不明白你的意思抱歉。
    • 不是用$_SESSION来识别,而是用cookie来识别。
    • @ultimatebuster 你可以自己实现会话,但我不会。
    • @ultimatebuster:您不应该将重要数据存储在 cookie 本身中,这会使其容易被其他方式窃取
    【解决方案2】:

    如果实施得当,会话 ID 非常长且随机,足以让猜测变得不可行(尽管如果您能够猜测特定用户的会话 ID,那么是的,您将充当该用户)。但是你可以嗅探和劫持会话——这就是 firesheep 所做的:http://en.wikipedia.org/wiki/Firesheep

    【讨论】:

    • eek。这让我非常害怕。从现在开始,我会更加小心我在 cookie 和会话上吐出的内容..
    【解决方案3】:

    是的。

    识别用户的唯一方法是与每个请求一起发送的伪随机值。 如果攻击者能够猜出要发送的正确值,他就可以伪装成其他人。

    有不同的方法可以让这变得更难:

    • 使会话 ID 更长(熵更多,更难猜测)
    • 检查其他信息,例如用户代理(本质上是更多的熵)
    • 显然:使用好的随机数生成器
    • 尽早使会话过期,以便随时提供一组较小的有效会话 ID
    • 经常更新会话 ID,即使是有效 ID
    • 使用 SSL 加密所有通信以避免彻底的 cookie 劫持

    【讨论】: