我正在编写一个包含布尔型$_SESSION['logged_in']
的PHP网站。当数据库中存在用户名和密码匹配时,它被设置为true
。会话欺骗(PHP)
我对会议还很陌生,只是想知道是否可以通过将此布尔值设置为true
来绕过登录过程,如果未注册的用户(或者注册用户)有可能绕过登录过程,曲奇饼。我知道用户将不得不从客户端操纵服务器端变量,但我的问题是多么容易,用户如何去完成这样的任务,是否有任何已知的漏洞利用,以及避免这种攻击的最佳实践/预防措施是什么?
我正在编写一个包含布尔型$_SESSION['logged_in']
的PHP网站。当数据库中存在用户名和密码匹配时,它被设置为true
。会话欺骗(PHP)
我对会议还很陌生,只是想知道是否可以通过将此布尔值设置为true
来绕过登录过程,如果未注册的用户(或者注册用户)有可能绕过登录过程,曲奇饼。我知道用户将不得不从客户端操纵服务器端变量,但我的问题是多么容易,用户如何去完成这样的任务,是否有任何已知的漏洞利用,以及避免这种攻击的最佳实践/预防措施是什么?
让我们从好消息开始:$_SESSION
数组是默认情况下,客户端完全不可见且不可执行:它存在于服务器上,并且仅在服务器上,在执行环境中,不对客户端开放。
现在回到地球:很容易让PHP代码“接近正确”,从而在服务器看到的客户端和会话之间打开一扇门。除此之外,窃取客户端会话(包括cookie)非常容易。
我推荐几个缓解,已被证明是十分有效:
$loggedin=($_SESSION['cookie']==$_COOKIE['session'])
的方向做一些事情。这使攻击者需要:Cookie和会话ID。谢谢你的信息和伟大的建议 – verbumSapienti
我喜欢盐胡椒的东西 –
除了您的代码之外,任何人都无法操作会话中的值。为了避免这种情况,他必须有权在服务器上运行代码或利用代码或服务器中的安全漏洞(无论是安全漏洞)。如果用户能够这样做,他可能不需要打扰会话值,因为他也可以直接在服务器上做其他任何事情。
我可以看到这种攻击可能发生的唯一方法是,如果代码中存在其他漏洞,或者他们有权访问您的服务器(通过其他方式)。当然,如果他们有权访问您的服务器,他们有权访问您的数据库,源代码,可能是网络日志,可能包括密码在内的所有原始互联网流量......
会话域中遇到的最常见问题是Session Hijacking。这是因为会话与会话参数相关联。每次向服务器发送请求时,该参数都需要由用户提供。正如你可以想象的,如果有人能够猜测或检索参数,他们应该可以'劫持'会话。
编辑:为了防止它的安全措施,看看Eugen Reck的帖子。
如果客户端可以更改服务器上的会话数据而不用特意允许它,则会出现比此更大的问题。我会更担心一些蹩脚的共享主机与存储会话数据的一些共享临时目录。甚至会议固定。 – PeeHaa
@PeeHaa,agree .. – verbumSapienti
http://stackoverflow.com/questions/6912223/is-it-possible-to-change-a-session-variable-client-side –