Jam*_*mes 30 php session-cookies
我主要是一名C++程序员,但我正在努力学习一些PHP.
显然,实现Web用户会话的方法是使用$ _SESSION变量将用户的登录ID存储在cookie中.
是否有人只能修改他们的cookie,赋予他们不同的权限或以其他用户身份登录?
看起来这种认证机制只是让用户将他们的ID存储在一个文件中 - 然后只是相信他们不要改变它.
有什么东西阻止了这个吗?
谢谢!
0b1*_*011 39
PHP会话仅在您的应用程序提供时才是安全的.PHP会话将为用户提供伪随机字符串("会话ID"),以便他们识别自己,但如果该字符串被攻击者截获,则攻击者可以伪装成该用户.
此信息来自PHP手册中的"会话管理基础",但稍微简化了一下.有些事情可能已经错过了.一定要仔细阅读.
$userId-
)启用sessions.use_only_cookies
和禁用session.use_trans_sid
Referer
标头中(可选)跟踪$_SESSION
与请求相关的其他信息(IP地址,用户代理字符串等)
Jam*_*mes 17
不,会话存储在服务器上,用户无法访问.它用于存储整个站点的信息,例如登录会话.
以下是用法示例:
<?php
session_start();
if (password_verify($_POST['password'], $hash)) {
$_SESSION['auth'] = true;
}
?>
Run Code Online (Sandbox Code Playgroud)
然后可以跨站点访问该会话以检查用户是否已经过身份验证.
<?php
session_start();
if ($_SESSION['auth']) {
echo "You are logged in!";
}
?>
Run Code Online (Sandbox Code Playgroud)
用户无法编辑这些值,但会话的ID通过cookie作为长随机字符串存储在计算机上.如果未经授权的用户获得对这些字符串的访问权限,则他们可以访问该站点.
如果这样做:
$_SESSION['user'] = $username;
Run Code Online (Sandbox Code Playgroud)
然后$username
就不会直接存储在cookie中了。相反,将生成一个唯一的会话 ID 并将其存储在 cookie 中。
您存储的信息$_SESSION
仅存储在服务器端,永远不会发送到客户端。在客户端的后续请求中,服务器将通过存储在 cookie 中的 id 加载会话数据session_start()
。
它相对安全。唯一可能发生的事情是有人可以拦截会话 ID,从而窃取真正的用户会话。HTTPS 可以防止这种情况发生。
回答这个问题需要两种方法:
对于大多数用例,PHP会话ID很难猜测.没有比其他广泛使用的系统更难或更硬.
只信任一个会话cookie(并且只存在会话cookie)对我来说似乎不是很安全,无论这个会话cookie来自哪里 - PHP或其他地方.
因此,简而言之:PHP会话是安全的,因为您使用它们会使它们变得安全.对于我所知道的任何基于会话cookie的系统都是如此.