我主要是一名C ++程序员,但我正在努力学习一些PHP。
显然,实现Web用户会话的方法是使用$ _SESSION变量将用户的登录ID存储在cookie中。
是否有人只能修改他们的cookie,赋予他们不同的权限或以其他用户身份登录?
似乎这种身份验证机制只是让用户将他们的ID存储在一个文件中 - 然后只是信任他们不要改变它。
有什么东西阻止了这个吗?
谢谢!
答案 0 :(得分:32)
PHP会话只有在您的应用程序提供时才是安全的。 PHP会话将为用户提供伪随机字符串(“会话ID”),以便他们识别自己,但如果该字符串被攻击者截获,则攻击者可以伪装成该用户。
此信息来自"Session Management Basics" in the PHP manual,但有点简化。有些事情可能已经错过了。一定要仔细阅读。
$userId-
)启用sessions.use_only_cookies
并停用session.use_trans_sid
Referer
标题定期regenerate the session ID和invalidate old session IDs shortly after regenerating
可选择跟踪$_SESSION
中与请求相关的其他信息(IP地址,用户代理字符串等)
答案 1 :(得分:11)
不,会话存储在服务器上,用户无法访问。它用于存储整个站点的信息,例如登录会话。
以下是用法示例:
<?php
session_start();
if (password_verify($_POST['password'], $hash)) {
$_SESSION['auth'] = true;
}
?>
然后可以通过站点访问该会话以检查用户是否已经过身份验证。
<?php
session_start();
if ($_SESSION['auth']) {
echo "You are logged in!";
}
?>
用户无法编辑这些值,但会话的ID通过cookie作为长随机字符串存储在计算机上。如果未经授权的用户获得对这些字符串的访问权限,则他们可以访问该网站。
答案 2 :(得分:5)
回答这个问题需要两种方法:
PHP会话ID很难猜到大多数用例。没有比其他广泛使用的系统更难或更硬。
只信任会话cookie(并且只存在会话cookie)对我来说似乎不是很安全,无论这个会话cookie来自哪里 - PHP或其他地方。
因此,简而言之:PHP会话是安全的,因为您使用它们会使它们变得安全。对于我所知道的任何基于会话cookie的系统都是如此。
答案 3 :(得分:3)
如果这样做:
$_SESSION['user'] = $username;
然后$username
不会直接存储在Cookie中。相反,将生成唯一的会话ID并将其存储在cookie中。
您在$_SESSION
中存储的信息仅存储在服务器端,从不发送到客户端。在客户端的后续请求中,当您执行session_start()
时,服务器将按存储在cookie中的ID加载会话数据。
相对安全。唯一可能发生的事情是有人可以拦截会话ID,从而窃取真正的用户会话。 HTTPS可以防止这种情况发生。
答案 4 :(得分:1)
无论你对这个话题得到什么答案,你都很可能不会满意,因为关于这个话题有很多不同的意见。甚至还有关于会话和PHP安全性的全书。
你希望得到的最佳答案可能是“会议和你想要的一样安全”。更多的工作和更多的预防措施显然会使它们更安全,但实现本身将消耗更多的时间。与您所做的一切一样,您可以根据自己的需要来衡量安全性的安全程度。
答案 5 :(得分:0)
由于您是C ++程序员,您只需要知道客户端可见的会话只是不同地址空间(服务器)上的指针,因此无法从客户端模式访问会话。