gaorenhua
V2EX  ›  Java

关于 token 被盗取的问题

  •  
  •   gaorenhua · Oct 22, 2020 · 7964 views
    This topic created in 2213 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
    tinyuu
    Oct 22, 2020 via iPhone
    1
    浏览器控制台就能看见 f12 。都控制电脑了。
    eason1874
    eason1874
    Oct 22, 2020
    2
    能咋办,token 被盗跟 cookie 被盗就一回事。

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

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

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

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