会话欺骗(PHP)

时间:2013-07-01 20:51:43

标签: php session spoofing

我正在用PHP编写一个包含布尔值$_SESSION['logged_in']的网站。当数据库中存在用户名和密码匹配时,此值设置为true

我对会话很陌生,只是想知道是否有可能未注册(或者,就此而言,已注册)的用户通过将此布尔值设置为true来绕过登录过程,因为可以使用cookie。

我理解用户必须从客户端操作服务器端变量,但我的问题是这是多么容易,用户将如何完成这样的任务,是否有任何已知的漏洞,什么是避免这种攻击的最佳做法/预防措施?

4 个答案:

答案 0 :(得分:16)

让我们从好消息开始:$_SESSION数组默认完全不可见并且可由客户端操作:它存在于服务器上,仅存在于服务器上,在执行环境中,不对客户。

现在回到原点:很容易让你的PHP代码“差不多”,从而在服务器看到的客户端和会话之间打开一扇门。除此之外,窃取客户端会话(包括cookie)非常容易。

我建议一些已经证明非常有效的缓解措施:

  • 不存储“登录”值 - 而是存储“会话cookie”值,并将cookie设置为客户端。在客户请求上,按照$loggedin=($_SESSION['cookie']==$_COOKIE['session'])的方式进行操作。这使得攻击者需要:cookie和会话ID。
  • 经常刷新会话cookie,在错误的cookie上终止会话。如果黑帽窃取cookie和会话,真实用户的下一次点击将同时注销并创建可记录的事件。
  • 如果您的请求来自JS,请考虑创建一个简单的身份验证功能:不是发送身份验证令牌,而是使用时间戳对其进行加密,然后对其进行哈希处理。发送salt,timestamp和hash。让服务器检查时间戳。

答案 1 :(得分:1)

除了您的代码之外,任何人都无法在会话中操作值。对于有人绕过它,他必须有权在服务器上运行代码或利用代码或服务器中的安全漏洞(无论是安全漏洞的方式)。如果用户能够做到这一点,他可能不需要费心处理会话值,因为他也可以直接在服务器上做其他任何事情。

答案 2 :(得分:1)

会话域中遇到的最常见问题是Session Hijacking。这是因为会话与会话参数相关联。每次向服务器发送请求时,用户都需要提供此参数。你可以想象如果有人能够猜测或检索参数,他们应该“劫持”会话。

编辑:有关它的安全措施,请查看Eugen Reck的帖子。

答案 3 :(得分:0)

我能看到这种攻击可能发生的唯一方法是,如果您的代码中存在其他漏洞利用,或者他们是否可以访问您的服务器(通过其他方式)。当然,如果他们可以访问您的服务器,他们可以访问您的数据库,源代码,可能是网络日志,可能包括密码等所有原始互联网流量....