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

关于 token 被盗取的问题

  •  
  •   gaorenhua · 2020-10-22 11:04:06 +08:00 · 6615 次点击
    这是一个创建于 1491 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前后端分离开发的时候,服务端 api 一般都喜欢用 jwt,大家都一直在提 token 被盗取了怎么办? token 是如何被盗取的呢?可能就是人为的泄露账号密码?可能是被钓鱼,电脑被挂马? 网上好多人说用 fidder 抓取之后可以看到 token,我想知道是咋看到的,是你在用户端安装了 fidder 用控制了人家的电脑吗? 还有木有别的泄露的可能? 求教。

    25 条回复    2020-10-23 08:14:22 +08:00
    tinyuu
        1
    tinyuu  
       2020-10-22 11:15:10 +08:00 via iPhone
    浏览器控制台就能看见 f12 。都控制电脑了。
    eason1874
        2
    eason1874  
       2020-10-22 11:19:46 +08:00
    能咋办,token 被盗跟 cookie 被盗就一回事。

    只能定期续存和注销,没别的办法。在存续期间被盗就是被盗了,服务端没办法分辨出来是不是被盗了,除非绑定 IP,IP 一变就失效,但是这样用户就要经常登录了。
    qiayue
        3
    qiayue  
       2020-10-22 11:22:10 +08:00
    想盗他人的 token 还是有办法的,举例你开发一个很好用的 chrome 插件,然后加载一些恶意代码……
    wunonglin
        4
    wunonglin  
       2020-10-22 11:23:30 +08:00
    用时间和地点去验证。时间大于小于多少,和在不在获取 token 的城市,用来判断是否注销掉。

    但是可惜的是 jwt 没有注销的说法
    gaorenhua
        5
    gaorenhua  
    OP
       2020-10-22 11:25:10 +08:00
    @wunonglin 类似微信换手机登录,不是常用手机需要输入密码验证。
    TimePPT
        6
    TimePPT  
       2020-10-22 11:29:04 +08:00
    最常见的是中间人,浏览器带后门的插件,电脑某些暗戳戳软件、家庭路由有些无良厂家、甚至运营商自己监守自盗(之前微博有传出被某些小地方运营商搞劫持……)
    TimePPT
        7
    TimePPT  
       2020-10-22 11:30:35 +08:00   ❤️ 2
    比较好的方式全程 https,还可以做设备指纹验证,浏览器指纹也能做,就是效果差一些,成本也高点。
    wunonglin
        8
    wunonglin  
       2020-10-22 11:31:50 +08:00
    @gaorenhua #5

    就是类似这样的,逻辑你自己想就可以了。但是最好别单用 jwt,不然没法注销。

    据说 webRTC 是能获取电脑网卡的 ip 地址还是 mac 地址我忘了,你可以用来判断是不是本机这样样子。我没研究过,你可以看看
    sarices
        9
    sarices  
       2020-10-22 11:42:16 +08:00
    @wunonglin 维护一份黑名单就好了,要是怕太多数据可以定期清理一些过期数据
    zsdroid
        10
    zsdroid  
       2020-10-22 11:46:21 +08:00
    那账号密码被盗怎么办。这种不需要在意。毕竟 token 是有效期的。
    zpfhbyx
        11
    zpfhbyx  
       2020-10-22 11:59:17 +08:00
    @zsdroid 2fa 啊.
    WishMeLz
        12
    WishMeLz  
       2020-10-22 12:00:49 +08:00
    token 加上混淆的呀。在加上一个时间限制,基本没问题
    wjhjd163
        13
    wjhjd163  
       2020-10-22 12:11:28 +08:00 via Android
    用户自身防护做不好情况下
    怎样的方案都无效
    Chrome 保存本地的密码都是可以直接取出来的
    https+token 就足够了
    KuroNekoFan
        14
    KuroNekoFan  
       2020-10-22 12:20:21 +08:00   ❤️ 1
    一般用户谁装 fiddler,另外就是常见的 jwt toolkit 应该可以配置隐藏掉 header,你们开发者再约定非默认的算法和类型,实在不行上面有提到,把 payload 再编码一下
    sujin190
        15
    sujin190  
       2020-10-22 12:46:48 +08:00
    各种免费 wifi,路由器,手机电脑内的木马软件,各种防火墙,各种骨干网节点,都能看到啊,网页的还有各种劫持,现在看来估计是各种免费 wifi 和路由器记录的日志危害最大了,有 https 好一些
    fu4k
        16
    fu4k  
       2020-10-22 12:52:31 +08:00   ❤️ 1
    JWT 存在几个潜在风险点,简单说两个:
    1.JWT 支持将算法设置为 None,此时签名被置空,可以伪造任意 Token
    2.如果你的密钥强度不够,可以被很快的暴力破解
    Cbdy
        17
    Cbdy  
       2020-10-22 13:09:29 +08:00
    别用 jwt
    wanguorui123
        18
    wanguorui123  
       2020-10-22 14:17:53 +08:00
    1 、纯粹的 Token,只能通过过期时间来判断。
    2 、为了安全可以加 Redis 之内的服务,在服务端缓存一些登录状态用来加强判断的准确性,如果异常就提示用户修改密码
    redtea
        19
    redtea  
       2020-10-22 14:25:35 +08:00   ❤️ 1
    每次请求返回一个随机的 csrf token,下次请求必须传这个 csrf token,服务端校验是否之前生成。这样基本能杜绝。
    gzf6
        20
    gzf6  
       2020-10-22 15:21:16 +08:00
    Web Authentication ?
    unco020511
        21
    unco020511  
       2020-10-22 16:30:40 +08:00
    https 基本都 ok 了,然后定期刷新 token
    liaoliaojun
        22
    liaoliaojun  
       2020-10-22 16:51:13 +08:00
    设置 http only,客户端无法获取到 cookie,就不能从 web 端盗取了
    vzyw
        23
    vzyw  
       2020-10-23 00:09:19 +08:00 via iPhone
    jwt 可以注销的 后端把 jwt 整个字符串存 redis 里 先判断 redis 里也没有这个 jwt string 再验证 jwt 。注销就是删除这个 jwt
    @wunonglin
    nong99
        24
    nong99  
       2020-10-23 07:09:35 +08:00 via iPhone
    @redtea 这个方法貌似简单暴力哦~
    有两点请教:
    1 如何在服务端有效的存储这个随机 token 和检验下次请求呢
    2 但是本身也会暴露了传回的这个 csrf token 呢?
    redtea
        25
    redtea  
       2020-10-23 08:14:22 +08:00 via iPhone
    @nong99 这个方案主要是用在 post 上,防止盗 token 的人提交请求。存 redis 就行了。要防暴露的话就用 https 。暴露了也没关系,用一次就没用了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1418 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:20 · PVG 01:20 · LAX 09:20 · JFK 12:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.