【发布时间】:2013-06-29 02:32:36
【问题描述】:
我正在用 PHP 编写一个包含布尔值 $_SESSION['logged_in'] 的网站。当数据库中存在用户名和密码匹配时,此设置为 true。
我对会话很陌生,只是想知道未注册(或就此而言,已注册)用户是否有可能通过将此布尔值设置为 true 来绕过登录过程,就像使用一个饼干。
我知道用户必须从客户端操作服务器端变量,但我的问题是这有多容易,用户将如何完成这样的任务,是否有任何已知的漏洞,以及避免此类攻击的最佳做法/预防措施是什么?
【问题讨论】:
-
如果客户端可以在没有您特别允许的情况下更改服务器上的会话数据,那么您将面临更大的问题。我会更担心一些糟糕的共享主机,其中包含一些存储会话数据的共享临时目录。甚至会话固定。
-
避免的最佳做法是直接将 $_SESSION 变量分配给未过滤的用户输入。永远不要相信用户的输入。如果您确实在过滤输入,那么我看不出它是如何完成的
-
“可能”吗,是的。可以100%预防吗?不是任何可以在你身边控制的东西。但是,如果您遵循良好的标准,这极不可能。 php.net::Sessions and Security