V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gaorenhua
V2EX  ›  Java

关于 token 被盗取的问题

  •  
  •   gaorenhua · Oct 22, 2020 · 7402 views
    This topic created in 2014 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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