Php 以其他用户身份登录,例如更改会话、切换用户

Php 以其他用户身份登录,例如更改会话、切换用户,php,apache,Php,Apache,我有一段代码,它改变了当前用户会话,管理员的想法——以现有用户身份登录,然后再返回 为此,我将信息存储在会话和数据库中。因此,稍后我可以检查试图成为管理员的用户是否具有会话变量,并且in DB是相应的条目。因此,攻击者必须设置一个会话变量,然后还要创建一个DB条目——从这个角度看,这对我来说是安全的 用户流为: 管理员单击一个按钮,将他重定向到用户前端。然后在前端是一个按钮,返回到管理 问题是我对下面的代码感到完全不确定,我担心已经打开了一个安全漏洞,或者犯了错误。总的来说,这段代码对我来说很奇

我有一段代码,它改变了当前用户会话,管理员的想法——以现有用户身份登录,然后再返回

为此,我将信息存储在会话和数据库中。因此,稍后我可以检查试图成为管理员的用户是否具有会话变量,并且in DB是相应的条目。因此,攻击者必须设置一个会话变量,然后还要创建一个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.

类似的问题(但老套的答案对我没有帮助——让我更加困惑):

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

如果您想进行用户切换,请使用laravel插件(如果您正在使用laravel)

如果您没有使用Laravel,那么您可以为您的用户进行api调用,并且使用api生成器,您可以创建一个切换系统,以您想要使用新令牌登录的用户身份登录

JWT是我用来实现这一点的api,我的userswitch工作得很好


GoodLuck

Facebook刚刚被黑客攻击,基本上就是按照你所描述的那样。另外,不确定管理员以其他用户的身份登录是不是一个好主意,这似乎是一个很大的失败点。Facebook已经被黑客攻击了一个不同的安全问题,是的“以用户的身份查看”,但最终还有其他问题,你的意思是我不应该编写自己的登录机制,而是使用我使用的框架提供的东西?JWT是非常有趣的thx提示。是的,这就是我的意思,它将节省你很多时间,你将使用API的not会话的膨胀到目前为止,代码似乎很好,我将很快自己写一个答案。是的,这是有问题的,模拟用户会带来很多警告。但这是一个要求,我不使用Laravel,我使用的框架也没有这样的API。JWT看起来很神奇,在我看来,应该用它来代替“传统”的php会话;是的,Idd,这是另一个话题(一个大话题:P)。如果您已经内置了PHPAPI登录系统,那么您可以根据pai键而不是会话向其中添加用户开关。