首页 > 解决方案 > 以其他用户身份登录,例如更改会话、切换用户

问题描述

我有更改当前用户会话的代码,它对管理员的想法 - 以现有用户身份登录,然后再次返回。

为此,我将信息存储在会话和数据库中。所以稍后我可以检查尝试成为管理员的用户是否具有会话变量-并且在 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.

类似的问题(但旧答案,它对我没有帮助 - 让我更加困惑):你可以在会话中切换 PHP 会话吗?

标签: phpapache

解决方案


如果我是你,我不会那样做。这太冒险了。

如果您想让用户切换使用 laravel 插件(如果您使用的是 laravel)。

如果您不使用 Laravel,那么您可以为您的用户进行 api 调用,并使用 api 生成器进行切换系统,以使用新令牌以您想要登录的用户身份登录。

JWT 是我用来执行此操作的 api,并且我的 userswitch 工作正常。

祝你好运


推荐阅读