php - 以其他用户身份登录,例如更改会话、切换用户
问题描述
我有更改当前用户会话的代码,它对管理员的想法 - 以现有用户身份登录,然后再次返回。
为此,我将信息存储在会话和数据库中。所以稍后我可以检查尝试成为管理员的用户是否具有会话变量-并且在 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 会话吗?
解决方案
如果我是你,我不会那样做。这太冒险了。
如果您想让用户切换使用 laravel 插件(如果您使用的是 laravel)。
如果您不使用 Laravel,那么您可以为您的用户进行 api 调用,并使用 api 生成器进行切换系统,以使用新令牌以您想要登录的用户身份登录。
JWT 是我用来执行此操作的 api,并且我的 userswitch 工作正常。
祝你好运
推荐阅读
- java - 没有递归的冰雹序列(请)
- html - 下拉菜单流出屏幕
- swift - 通过firebase数据库问题连接到vimeo视频
- laravel - Laravel Eloquent,使用 withTrashed() 返回空关系的多深度点表示法
- ajax - 使用方法 PUT 调用 Laravel AJAX
- java - 将泛型与 JUnit 4 Theories 一起使用时出错
- android - setContentView 是做什么的?
- java - I'm unsure what to put in my try statement and I keep getting an "Ecxeption in thread "main"" error
- python - My global variable isn't found in another function
- bash - Bash replacing white space taking too much time for larger strings