【问题标题】:How Do I Make Sessions More Secure? [duplicate]如何使会话更安全? [复制]
【发布时间】:2011-01-25 20:56:30
【问题描述】:

可能重复:
PHP Session Security

我在整个应用程序中都在使用会话。我想让它们更安全。目前我正在使用$username = $_SESSION['username'];之类的代码。

如何让我的会话更安全?

【问题讨论】:

  • 您只是为变量赋值。超出范围的这段代码意义不大。为什么您认为您的方法不安全?
  • 您还可以在客户端登录时将其 IP 地址和浏览器用户代理存储在会话变量中。这样您就可以在每个后续请求中验证这一点。欺骗会话 ID 比 IP 地址容易得多

标签: php security session


【解决方案1】:

首先要注意的是Session Hijacking。引用维基百科:

在计算机科学中,会话劫持是指利用有效的计算机会话(有时也称为会话密钥)来未经授权访问计算机系统中的信息或服务。特别是,它被用来指代用于向远程服务器验证用户身份的魔术 cookie 被盗。它与 Web 开发人员特别相关,因为用于在许多网站上维护会话的 HTTP cookie 很容易被攻击者使用中间计算机或访问受害者计算机上保存的 cookie 窃取(参见HTTP cookie theft)。

基本思路是,如果您网站的访问者 (Alice) 拥有会话 cookie 和会话 ID(假设它是 12345),那么如果恶意用户 (Mallory) 能够通过以下方式获知 Alice 的会话 ID无论是 JavaScript、流量嗅探、社会工程还是其他方法,Mallory 都可以浏览到您的网站并将其会话 ID 设置为 12345,然后他实际上就变成了 Alice。

防止这种情况发生的一种方法是更改​​每个请求的会话 ID,您可以通过 PHP session_regenerate_id function 执行此操作。在调用session_start()之后,你会在每个请求开始时调用session_regenerate_id

请注意,这是一个非常复杂的话题。我强烈建议您阅读 Wikipedia 文章并确保您完全理解其中的问题。

编辑:我正要为您输入更多信息,但后来我意识到您的问题确实是重复的of this StackOverflow question。我建议将其作为起点阅读。

【讨论】:

    【解决方案2】:

    这在很大程度上取决于您要保护的内容。如果您担心会话中包含的信息可能会被暴露或修改,则不必担心,因为它只能由服务器查看和修改。

    如果您担心某些人可能会使用其他人的会话,您可以执行以下操作:

    • 分析您的代码并确保您没有XSS 缺陷。
    • 如果您的访问者使用公共网络,请使用 SSL 防止会话劫持。
    • 确保您的会话使用的是 HTTP Only 标志

    【讨论】:

    • +1 用于 XSS!呃,好吧,你知道我的意思;-)
    【解决方案3】:

    在数据库中使用md5版本的密码,然后md5加密会话密码,这样如果密码正确,那么这2个值就一样了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2013-09-03
      • 2015-12-17
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多