【问题标题】:PHP Session hijack securityPHP Session 劫持安全
【发布时间】:2014-01-22 05:49:25
【问题描述】:

我已经对此进行了大量研究。不幸的是,我发现的信息都没有真正有用。我正在调查一个会话劫持的具体案例,因为我已采取措施保护我的会话,但我无法弄清楚这一点。

我设置的安全措施是在会话开始时获取浏览器指纹:

$_SESSION['fingerprint'] = $_SERVER['HTTP_USER_AGENT'];

每次请求会话时,我都会执行检查

if($_SESSION['fingerprint'] != $_SERVER['HTTP_USER_AGENT']) // Handle accordingly

因此,启用httpOnly 后,除了欺骗具有不安全连接的 wifi 路由器或任何其他类型的连接侦听外,攻击者将知道所有请求标头,因此会话劫持的余地并不多,因此攻击者的复杂性指纹根本不重要。如果攻击者要复制他所有受害者的请求标头,我该如何保护会话?

【问题讨论】:

  • 您能更详细地解释一下您要完成的工作吗?使用一个参数,比如正在运行的浏览器不是很安全。实际上它非常具有欺骗性。
  • @Phillip 我刚刚举了一个例子。如果攻击者知道受害者发送的所有信息,我将使用多少个params 有什么区别?

标签: php security session


【解决方案1】:

你不能。一堆 HTTP 标头,其中一个是 cookie,是唯一可以识别客户端的东西。复制/欺骗所有标题意味着冒充用户。通过公开的匿名连接,您实际上无能为力。如果您需要更多信息,则必须开始将实际机密带外分发给客户端,例如客户端 SSL 证书。不过,这并不实际。

在实践中,如果您使用 SSL 连接保护您的连接免受中间人的攻击,那么这将尽可能实用和安全。

【讨论】:

  • 我基本上同意,尽管值得一提的是,进行 IP 标识符检查 ($_SERVER['REMOTE_ADDR']) 将提供一定程度的保护,因为如果这些数据被欺骗,数据包将不会返回到正确的位置 -当然,IP 地址通常会在会话中移动,因此会导致合法会话被终止,但如果由于某种原因无法使用 SSL,这是一种可能的方法。也就是说,任何需要安全的东西都需要通过 SSL。
  • 是的,IP 检查在星巴克的攻击者场景中没有帮助,并且还会产生许多误报。 TCP/IP是一种数据传递机制,和认证无关,我就不提了。如果您没有使用 SSL,那么您一开始就做错了。
  • 这让我想知道,在 ssl 出现之前人们是如何使用会话的
  • @account50 错误。他们用错了。 ;-) 谷歌“Firesheep”以及它给大家带来的教训。
  • @deceze 感谢您的洞察力。这其实有点吓人。很遗憾看到 SO 并不总是使用 ssl .. :D
猜你喜欢
  • 1970-01-01
  • 2019-08-07
  • 2012-01-08
  • 2011-09-22
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
相关资源
最近更新 更多