V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
echohn
V2EX  ›  程序员

要不要开发一个不需要用户密码就直接登录用户账号的功能,以测试用户提交的问题?

  •  
  •   echohn · 2020-03-10 12:21:02 +08:00 · 2441 次点击
    这是一个创建于 1717 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近几次碰见一个情况,就是用户反馈,界面数据显示的不对。

    我从后台数据库查,应该是没有问题的。可能问题出现于前端的一些处理逻辑上。

    现在的问题是,我觉得可能直接登录用户的账号在界面上看,比较好排查问题。

    因为用户密码是密文存储的,我不能动。所以我在想,是不是可以开发一个后台功能,点击就可以切换成该用户登录系统,从而更直观的排查问题。

    我这个想法不一定好,主要是我觉得可能会有安全风险。

    不知道大家有没有遇见过类似的情况,有没有什么好的方式来解决类似的问题?

    18 条回复    2020-05-23 17:17:52 +08:00
    ebingtel
        1
    ebingtel  
       2020-03-10 14:07:37 +08:00
    登录历史里面 记录用户的 cookies……然后 为所欲为
    oott123
        2
    oott123  
       2020-03-10 14:14:09 +08:00   ❤️ 2
    这种功能很常见,叫 Impersonate。比如 gitlab 就有这个
    zhensjoke
        3
    zhensjoke  
       2020-03-10 15:44:17 +08:00
    数据库改密码。。。然后自己登陆测试。。之后再改回用户原来的。

    如果每个用户加密不一样当我没说。。
    marcomarco
        4
    marcomarco  
       2020-03-10 15:49:52 +08:00
    复制一份他的数据,到你的测试账号上看
    lishunan246
        5
    lishunan246  
       2020-03-10 16:21:00 +08:00 via Android
    返回的结果打到日志里,日志没问题就说明是前端的锅。
    ccc825
        6
    ccc825  
       2020-03-10 16:24:00 +08:00
    我这是特意写了前置方法,如果请求带了 user_id 就直接按这个 id 的用户登录来读数据
    yhxx
        7
    yhxx  
       2020-03-10 16:29:14 +08:00
    还有这种操作?
    我一直以为这种事情应该靠监控、日志之类的来查。。。
    imhxc
        8
    imhxc  
       2020-03-10 16:33:30 +08:00
    很正常,大厂一些部门有你说的这种类似的平台。
    mokeyjay
        9
    mokeyjay  
       2020-03-10 16:37:18 +08:00   ❤️ 1
    很正常,叫做 ghostlogin 之类的,比如 laravel 就有个包是专门干这个的 https://github.com/viacreative/sudo-su
    但是权限一定得管好,例如要先检测到当前登录的用户是超级管理员,才允许使用 ghostlogin
    learnshare
        10
    learnshare  
       2020-03-10 16:59:46 +08:00   ❤️ 1
    通常不建议直接拿用户账户登录,用户账户及功能应该只有用户本人可以操作,这是对用户的尊重
    可以实现一个授权 /邀请功能,用户授权管理员,然后管理员临时变成用户的“影子”登录,并获得用户同样的权限和功能。但执行操作时注意标明是“影子”,而非用户本人

    具体实现就很多样化了,核心是验证管理员身份,以及所有功能和权限都是指定用户的“影子”
    wangxiaoaer
        11
    wangxiaoaer  
       2020-03-10 17:10:21 +08:00 via Android
    典型的 XY 问题,解决办法不是让用户上传个截图就完事了吗?
    sudden
        12
    sudden  
       2020-03-10 17:18:03 +08:00
    这个问题挺可怕的,涉及到隐私了,君子不立危墙之下,建议你不要这样做(领导要求的话当我没说)
    Kr98
        13
    Kr98  
       2020-03-10 17:33:50 +08:00
    楼主可以直接看数据库内容,说明用户本身就没有隐私。
    只是简单测试用途的话,加一个超级密码,登录逻辑里面多加一个判断。
    echohn
        14
    echohn  
    OP
       2020-03-11 11:59:17 +08:00
    @sudden 还好还好,我这里是对 B 的,都是业务数据,涉及到个人隐私的字段,可能只有一个手机号。。。
    imdong
        15
    imdong  
       2020-03-11 12:06:42 +08:00 via iPhone
    之前公司内部业务系统,经常有业务员啥的弄错,不会用,而 admin 并没有操作权限,为了方便调试,加过这样的功能。
    如果是 admin 登录,就添加特殊的 super 标记,然后可以加载任意部门任意用户,并可以任意切换。
    cassiezhang
        16
    cassiezhang  
       2020-05-12 14:56:31 +08:00
    我们公司是做 saas 服务,也碰到了类似的问题,楼主最终选择什么方案呢?
    cassiezhang
        17
    cassiezhang  
       2020-05-12 14:56:56 +08:00
    @ccc825 能具体说说么?
    echohn
        18
    echohn  
    OP
       2020-05-23 17:17:52 +08:00
    @cassiezhang 当时最后选择了自己实现 ghost_login 的方式。

    新增了 ghost_login 的接口,当 superadmin 登录时,可访问该接口,跳过用户登录,直接为所选择要切换的用户颁发新的 token (我这里是 JWT 认证方式)。

    前端收到请求后,覆盖自己的 token,并在本地标记一个 ghost flag,用于页面显示和一些敏感功能的访问限制。

    PS:我在系统配置中增加了开关,打开时才能使用这个接口,用完就关上,也算是一层安全防护吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1154 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:30 · PVG 02:30 · LAX 10:30 · JFK 13:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.