我有更改当前用户会话的代码,它是管理员的想法-以现有用户身份登录,然后再次返回。
为此,我将信息存储在会话和数据库中。因此,稍后我可以检查试图成为admin的用户是否具有会话变量-并且在DB中是相应的条目。因此,攻击者必须设置一个会话变量,然后再创建一个数据库条目-从这个角度来看,对我来说似乎是安全的。
用户流为: 管理员单击一个按钮,然后将他重定向到用户前端。然后在前端是一个按钮,可让您重新成为管理员。
问题是我完全不确定下面的代码,恐怕已经打开了安全漏洞,否则可能会出错。总体而言,这段代码对我来说很奇怪,使用PHP已有多年,但我从未碰过会话。
这真的可以正确地创建一个新会话吗?
//clear data in current session
foreach (array_keys($_SESSION) as $key) {
unset($_SESSION[ $key ]);
}
//create new session id while old is active (takes care of collision)
$new_session_id = session_create_id();
//finish session
session_write_close();
//set new id
session_id($new_session_id);
//start with new id
session_start();
切换到用户时,更改会话后将执行以下代码:
$_SESSION['mysessionkey'] = $admin_id;
//and more code making corresponding entry in db.
类似的问题(但过时的答案并不能帮助我-使我更加困惑):Can You Switch PHP Sessions In a Session?
答案 0 :(得分:2)
如果我是你,我不会那样做。这很冒险。
如果要使用户切换,请使用laravel插件(如果使用laravel)。
如果您不使用Laravel,则可以为您的用户进行api调用,并使用api生成器可以创建一个切换系统,以您要登录的用户身份使用新令牌登录。
JWT是我用来执行此操作的api,并且我的userswitch正常工作。
好运