【问题标题】:how to prevent sessions id from being seen in debuggers?如何防止在调试器中看到会话 ID?
【发布时间】:2011-08-25 03:12:27
【问题描述】:

所以看起来 Opera Dragonfly 能够缓存 cookie 以及会话信息。特别是我的问题是 PHPSSID。有没有办法隐藏 PHPSSID 不被调试器/开发者工具在任何时候显示?

我不介意 cookie,因为它们是安全的。由于它们中的数据是用复盐以及其他一些东西进行散列的,所以伪造它们对我来说不是问题。

但我想确保没有看到 PHP 会话。我怎样才能做到这一点?

【问题讨论】:

  • 我不相信你可以。最好的办法是确保缓存的会话不能用于修改站点上的任何内容。 (例如:允许用户保持登录状态,但需要密码才能执行任何更改设置的操作。)
  • 我计划在对用户数据进行任何更改后重新生成会话,例如:密码更改、电子邮件更改等会杀死旧会话并创建一个新会话。

标签: php security session


【解决方案1】:

简而言之,答案是:你不能,这不是会话 ID 的工作。

会话 id 的意义在于它是一个非常随机的数字,通常称为cryptographic nonce。这个值是很难猜测的,然后它被用来在服务器端引用关于该会话的状态。这可能在数据库中,或者默认情况下 PHP 使用文件/tmp/THE_SESSION_ID$_SESSION 中存储的数据存储在此文件中,用户无法获取此数据。

在 PHP 中,为了防止攻击者窃取用户的会话 ID,您应该在您的 php.ini 中设置 session.cookie_secure=On。这会强制会话通过 HTTPS。

如果您使用的是 HTTPS,则该网络上的攻击者会掩盖会话 ID。使用 HTTPS 会话 ID 不能被 Wireshark 或 Firesheep 等工具劫持。不使用 HTTPS 违反了OWASP A9: Insufficient Transport Layer Protection。然而,用户仍然可以通过查看他的 cookie javascript:document.cookie 或使用 TamperData 来查看他自己的会话 ID。

【讨论】:

  • 但是你不需要一个有效的证书来使用 HTTPS 吗?可悲的是,这要花钱我不想支付,因为我没有传递任何重要数据
  • 如果你没有传递任何重要的数据,那你为什么这么关心会话ID。只是我们常规的 HTTP 会话 ID。如前所述,会话密钥只是将用户链接到会话,仅此而已。正如 Rich 在其他答案中所说,会话 ID 只是用户机器上的一个 cookie,您无法阻止用户看到它,或者为它设置自己的值。
  • @Kibbee 和 PT Desu 身份验证凭据(会话 ID)是重要信息。在任何安全系统中,您都必须清楚攻击者是谁。用户看到自己的会话 ID 显然不是攻击,但任何其他人获得此会话 ID 都是非常严重的 owasp 违规行为,可能使攻击者管理员访问您的应用程序。
猜你喜欢
  • 1970-01-01
  • 2018-02-10
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多