【问题标题】:PHP: Session SecurityPHP:会话安全
【发布时间】:2010-10-07 11:16:52
【问题描述】:

我阅读了有关会话安全的信息,例如。会话固定、劫持和注入,但对会话安全的工作方式感到困惑。我通常这样做的方式:

// when user logins, 
$_SESSION["user"] = "someuser";

// check user login
if (isset($_SESSION["user"]) && !empty($_SESSION["user"]))

也许我做错了,但我在任何地方都没有会话 ID,或者至少我没有使用它。有人可以解释应该如何使用会话 ID 以及它如何影响会话安全吗?另外,我对以下威胁的理解是否正确?

会话固定

  • 用户访问链接 (http://site.com?session_id=123) 并登录
  • 服务器将该会话 ID“标记”为已登录
  • 黑客现在可以访问http://site.com?session_id=123

我对 Session Fixation 的理解对我来说似乎非常错误。如果它正确,是否意味着黑客可以随机使用会话 ID,并且我很可能会被现有用户使用?

会话劫持

  • 黑客通过固定或猜测等方式获取会话 ID

会话注入

  • 这是什么?

【问题讨论】:

    标签: security web-applications session


    【解决方案1】:

    您没有明确使用会话 ID,但 PHP 会自动使用它们。会话 ID 以 cookie 的形式发送到浏览器,浏览器将其发送回服务器,每次请求都标识自己并恢复会话。没有它,会话是不可能的。

    提高安全性的一种方法是定期更改会话的 ID,使用 session_regenerate_id()。这样,如果黑客获得了某人的会话 ID,他就只有有限的时间来滥用它。

    防止会话劫持(黑客使用您的会话 ID 窃取您的会话)的另一种方法是在会话打开时存储客户端 IP 和用户代理字符串,并在恢复会话时验证它们没有更改。

    【讨论】:

    • 我可以说session_regenerate_id 将允许访问用户拥有一个新 ID,但没有此信息的第 3 方不能再使用旧会话 ID?但这是为用户提供的,而不是第 3 方,是第一个使用旧会话的人吗?
    • 如果ID恰好在黑客使用会话时重新生成,则只有黑客拥有新ID,将原用户完全锁定。
    【解决方案2】:

    使用会话时,会话 ID 是用于识别会话的唯一信息。因此,会话 ID 是敏感信息。

    现在,session hijackingsession fixation 这两种攻击都针对受害者的有效会话 ID 来获得该会话的访问权限。对于会话劫持,攻击者试图获取受害者的会话 ID,对于会话固定,攻击者试图将一个准备好的会话强加给受害者。

    为了保护您的应用免受这些会话攻击,有两种常见的安全措施:

    • 保护有效的会话 ID,并且
    • 验证会话的使用情况。

    使用 PHP 的默认会话设置,会话 ID 使用 cookie 传输(请参阅session.use_only_cookies)。您可以通过使用 SSL/TLS 的安全连接并将 session.cookie_httponly 设置为 true 来保护此 cookie,这样 cookie 只能在通过 HTTP 发送时读取,而不能由 JavaScript 等客户端程序读取.

    此外,您可以通过将客户端的指纹与会话相关联来验证会话的使用。这可能是user agent identifier 和其他请求标头字段的组合。

    此外,您应该在每次验证真实性或更改授权时更改会话 ID。您可以使用 session_regenerate_id(true) 来使旧会话 ID 失效。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 2011-11-06
      • 2020-04-16
      • 2011-02-11
      • 2012-12-29
      • 2012-09-24
      相关资源
      最近更新 更多