会话在php中被覆盖
我面临一个问题,我的会话被其他登录php的用户覆盖 当我们有大约50-100个用户的合理负载时,会话开始混淆。例如,如果一个用户在一段时间后以a身份登录,那么他的会话将切换到也已登录的用户B。这个系统已经运行了一年多,这是我们第一次面对这个问题 服务器正在运行Centos 我没有任何代码错误,但不知何故,一个人的数据会被其他人覆盖 请帮助我,因为我试图解决这个错误,但没有成功 是否存在覆盖用户会话数据的php ini设置?或 服务器端是否存在类似会话id随机化不正确的情况会话在php中被覆盖,php,session,Php,Session,我面临一个问题,我的会话被其他登录php的用户覆盖 当我们有大约50-100个用户的合理负载时,会话开始混淆。例如,如果一个用户在一段时间后以a身份登录,那么他的会话将切换到也已登录的用户B。这个系统已经运行了一年多,这是我们第一次面对这个问题 服务器正在运行Centos 我没有任何代码错误,但不知何故,一个人的数据会被其他人覆盖 请帮助我,因为我试图解决这个错误,但没有成功 是否存在覆盖用户会话数据的php ini设置?或 服务器端是否存在类似会话id随机化不正确的情况 提前感谢。是的,我正在
提前感谢。是的,我正在使用PHP的默认会话处理程序 我已经在登录页面中设置了会话变量
<?php
session_start();
include("dbconfig.php");
if($_POST['login']) {
$user = $_POST['user'];
$pass = $_POST['pass'];
$msg = '';
$check = mysql_query("SELECT * FROM `user` WHERE username = '{$user}' AND pass = '{$pass}'") or die(mysql_error());
$row = mysql_num_rows($check);
$ck = mysql_fetch_assoc($check);
if($row == 1) {
$_SESSION['name'] = $user; // used to be set to $ck['iname'];
$_SESSION['isadmin'] = 1;
$_SESSION['team'] = $ck['teamstatus'];
$_SESSION['logintime'] = time();
$_SESSION['priority'] = $ck['priority'];
$_SESSION['id'] = $ck['id'];
$_SESSION['designation'] = $ck['designation'];
$_SESSION['course'] = $ck['course'];
$_SESSION['year'] = $ck['year'];
$_SESSION['no'] = $ck['no'];
$_SESSION['div'] = $ck['div'];
$_SESSION['sp_designation'] = $ck['sp_designation'];
header("Location: index.php");
exit;
} else {
$msg = "Invalid Username or Password";
}
}
?>
通过阅读您的问题,我认为可能有以下原因: 首先,我建议您,如果要将搜索字符串从一个页面传递到另一个页面,可以使用querystring,因为创建大量会话变量会降低应用程序的速度 第二,由于会话依赖于会话状态提供程序,该提供程序为每个会话创建一个唯一的会话Id,而该会话几乎不可能重新生成[尽管它不是唯一的Id],只需检查您是否正在使用无Cookie会话,在该会话中,您的会话不依赖Cookie,也不依赖URL,这可能会再次引发您的会话
希望它能解决您的问题erk,我希望您发布的代码仅用于说明,对其实施感染攻击真的很容易(例如 实现会话劫持也很简单——当用户通过身份验证时,您应该生成一个新的会话id 假设您使用的是默认会话处理程序,则故障不可能出现在会话处理程序代码中。这在数千(数百万?)个应用程序中使用,并且适用于其他所有应用程序 最有可能的原因是数据缓存不好-您可以在没有任何中间代理的情况下复制它吗?您是否检查了来自Web服务器的头文件
C.我研究了这个问题,发现在32位会话文件中创建了一些具有1位id的会话文件。例如,sess_1和sess_8以及sess_f1d9037025f544376ff0d44511ed3192
我所看到的是,如果用户A处于空闲状态,用户B登录,那么用户A和用户B的cookie中都有一个额外的PHPSESSID,其中包含一个单位会话id,如sess_1。他们仍然保留32位PHPSESSID,但是,这些PHPSESSID会从服务器上删除,因此两个用户都默认为相同的会话id,并且因此,用户A现在可以获得用户B的会话及其访问权限。请显示用于初始化会话的代码。是的,正如Unicron所述,这看起来像是个问题在代码中。您是否使用PHP的默认会话处理程序?使用此代码时,您最好注意小Bobby表:当您想添加更多信息时,请编辑您的问题,不要回答它。
mysql\u real\u escape\u string
是您的朋友吗?我已经看到了服务器上创建的会话列表,并找到了一些1位id。是否你知道怎么解决这个问题吗?
<?php
session_start();
if(!(isset($_SESSION['name'])) && ($_SESSION['isadmin'] == 1) && (isset($_SESSION['id'])) && (isset($_SESSION['designation']))) {
header("Location: error.php");
exit;
}
otherwise perform the action
?>
user = "admin' OR ('bla'='"
password="')"