PHP Session 劫持安全

Posted

技术标签:

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

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

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

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

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

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

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

【问题讨论】:

4techs.org/83/how-to-prevent-session-hijacking 可能想读这篇文章。 您能更详细地解释一下您要完成的工作吗?使用一个参数,比如正在运行的浏览器不是很安全。实际上它非常具有欺骗性。 @Phillip 我刚刚举了一个例子。如果攻击者知道受害者发送的所有信息,我将使用多少个params 有什么区别? 【参考方案1】:

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

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

【讨论】:

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

以上是关于PHP Session 劫持安全的主要内容,如果未能解决你的问题,请参考以下文章

session劫持以及预防

常见WEB攻击之Session攻击(会话劫持)

Session攻击(会话劫持+固定)与防御

session攻击(会话劫持+固定)与防御

使用Asp开发的网站,如何在用户登陆前后重置ASPSESSIONID,以避免SESSION被劫持造成安全隐患。

Web安全之Cookie劫持