yuan93

token 被盗引发的数据安全问题

  •  
  •   yuan93 · Nov 18, 2021 via Android · 14127 views
    This topic created in 1814 days ago, the information mentioned may be changed or developed.
    最近在过等保,测试人员拿 admin 用户的 token 替换到了 guess 用户的请求头里,得出一个存在越权的结论,给的修复方案是: 对所有用户功能基于 sessionid 判断用户权限。

    但我寻思 sessionid 不也存在浏览器端吗,一样可以被等保测试人员拿到放在其他用户的请求里伪装 admin 用户
    118 replies  •  2024-04-28 18:03:10 +08:00
    1  2  
    ❮ ❯
    xiaoyuge
    xiaoyuge
    Nov 18, 2021
    1
    如果用了 Token ,那 Token 不就是作为 SessionID 了吗?
    lniwn
    lniwn
    Nov 18, 2021 via iPhone
    2
    那么问题来了,guest 用户使用了 admin 的 token ,拿它还是原来那个 guest 用户么?
    gadfly3173
    gadfly3173
    Nov 18, 2021❤️1
    3
    这个测试方法不是变成强行 CSRF 了么。。。
    yuan93
    yuan93
    OP
    Nov 18, 2021 via Android
    4
    @hhyygg 等保人员就是用大权限的用户的 token 覆盖到小权限的用户 token ,再去请求接口数据,要求识别出这个请求是小权限用户的。这不是脱了裤子放屁嘛,等于是要求你把你家钥匙给张三,要求张三去开门的时候开不了
    yuan93
    yuan93
    OP
    Nov 18, 2021 via Android
    5
    @lniwn 就是要求你还能识别出它是原来的 guest 用户
    gadfly3173
    gadfly3173
    Nov 18, 2021
    6
    按照这个说法,这个测试提的想法和传说中的 app 检测手机壳颜色一样了,打破第四面墙去检测屏幕之外的人。。。
    HelloWorld556
    HelloWorld556
    Nov 18, 2021
    7
    加个人脸识别吧
    ReysC
    ReysC
    Nov 18, 2021❤️4
    8
    token rename to sessionid
    wolfie
    wolfie
    Nov 18, 2021
    9
    这个简单,每次接口请求前,弹窗输入当前用户密码就行了。🐶🐶
    lniwn
    lniwn
    Nov 18, 2021 via iPhone❤️1
    10
    @liuzhen 明显测试人员没有理解 token 的意义。说个偏门,token 换成 admin 了,那用户就是 admin ,前段显示 guest ,是前端的 bug[🐶]
    darknoll
    darknoll
    Nov 18, 2021
    11
    这帮人啥都不懂啊
    mannixSuo
    mannixSuo
    Nov 18, 2021
    12
    token 里面放个用户的 IP ,判断下请求 IP 和 token 里面的 ip ?
    coosir
    coosir
    Nov 18, 2021❤️4
    13
    user_name + token 组合判断,他们替换就没用了,哈哈哈
    rockyliang
    rockyliang
    Nov 18, 2021
    14
    @mannixSuo 在使用产品过程中用户的 IP 地址有可能会变的,如果 IP 一变就要求用户重新登录,体验会很不好
    yuan93
    yuan93
    OP
    Nov 18, 2021 via Android
    15
    @mannixSuo IP 不行啊,服务器收到的同一个路由器下的不同电脑的 IP 是一样的,而且 WiFi 切到 4g 肯定会变 IP ,就让用户重新登录不够友好
    kiracyan
    kiracyan
    Nov 18, 2021
    16
    token 绑定设备 UA 或者唯一的客户端码 换了就重新登录
    yuan93
    yuan93
    OP
    Nov 18, 2021 via Android
    17
    @kiracyan 客户端就是 web 浏览器
    DoraMouse
    DoraMouse
    Nov 18, 2021❤️1
    18
    token 这里可以理解成打开门的钥匙,如果拿管理员的钥匙能打开管理员才能开的门,那这不是很正常的事,跟门有啥关系。
    sprite82
    sprite82
    Nov 18, 2021
    19
    等保这帮人就这样的,很 sb ,比如拿 admin 用户的页面 抽出部分 html , 给嵌入到 guest 用户的页面中,告诉我,你这个权限越权了
    x86
    x86
    Nov 18, 2021
    20
    人才,token 拉取的是权限...用户信息没变?
    Trim21
    Trim21
    Nov 18, 2021 via Android
    21
    要求使用管理员用户密码无法登录为管理员,彻底解决用户帐号密码泄漏问题。
    Foxii
    Foxii
    Nov 18, 2021 via Android
    22
    利用前端 bug 类似的机制跳转以骗过等保人员
    yuan93
    yuan93
    OP
    Nov 18, 2021 via Android
    23
    @sprite82 难搞,你们最后是怎么解决的呢?
    ila
    ila
    Nov 18, 2021 via Android
    24
    用 pc 端吧
    yuan93
    yuan93
    OP
    Nov 18, 2021 via Android
    25
    @Foxii 他们是在类似 postman 的工具上 copy token 测的
    cheng6563
    cheng6563
    Nov 18, 2021
    26
    等保的还叫我们关掉 keep-alive ,但我们用的是 HTTP2 。
    deplivesb
    deplivesb
    Nov 18, 2021
    27
    #12 楼这个兄弟是招行出来的吧,我招行 app 每次都会遇到 Face ID 登录之后点个都叫我重新登录一次
    Foxii
    Foxii
    Nov 18, 2021 via Android
    28
    @liuzhen 那个工具它有木有默认的 ua 比如 postman 就有
    sprite82
    sprite82
    Nov 18, 2021
    29
    @liuzhen 没得搞,让项目经理去晓之以情动之以理, 理由:强行修改 html 是没办法控制的,另外虽然加入了不属于 guest 用户的页面,但是用户请求后台也是没用的,有权限控制的。而且,你都同时有 admin 和 guest 的账号了,哪怕 guest 没权限做破坏,admin 也可以继续搞事,无解,这测试方式就不合理
    dzdh
    dzdh
    Nov 18, 2021
    30
    车钥匙被盗引起的汽车被偷问题
    whosesmile
    whosesmile
    Nov 18, 2021
    31
    有个中间办法类似银行的 APP ,如果你切换网络需要重新登陆,也就是检测 IP 之类的信息,但是如果安全员就在同一个设备上双开浏览器,暂时想不到办法。
    defunct9
    defunct9
    Nov 18, 2021❤️1
    32
    等保的让我们改掉 root 用户的用户名,不能叫 root 。
    Foxii
    Foxii
    Nov 18, 2021 via Android
    33
    token 过期设置为 0.5 秒前端 0.1 秒刷新一次,比的就是等保人员的手速
    whosesmile
    whosesmile
    Nov 18, 2021
    34
    没注意已经有人提了这个思路了,想到了如果只是想骗过等保测试,无非是把门槛拉高,比如你每次请求都加一个 CSRF TOKEN ,但是如果测试人员每次都有办法复制所有的请求头,那就是扯淡的事了,HTTP 没来就无状态,无解的事情。
    marcong95
    marcong95
    Nov 18, 2021
    35
    把 token 放 sessionID 里?
    Foxii
    Foxii
    Nov 18, 2021 via Android
    36
    @whosesmile 确实只能骗,因为本来就没啥问题
    misaka19000
    misaka19000
    Nov 18, 2021
    37
    加设备识别
    yuan93
    yuan93
    OP
    Nov 18, 2021 via Android
    38
    @Foxii 上有政策下有对策,这也是没有办法的办法了
    liuidetmks
    liuidetmks
    Nov 18, 2021
    39
    随机 nonce + token + 其他业务参 与 参数校验吧?

    如果他是简单的 Charles 抓包替换 替换能防住

    如果手里有项目源码,写的代码测试.那就~
    eason1874
    eason1874
    Nov 18, 2021
    40
    对浏览器来说 SessionID 和 Token 唯一区别就是字段名不一样。这测试水平不咋滴,搞不好你改个名字就完事了

    如果是前后端分离的,可以在登录时存一个 key 到 localStorage ,每次请求都用它签一个 RequestId 带上,服务端记录 RequestId ,同一 SessionID/Token 在一段时间内使用重复的 RequestId 直接 403 。这样搞,只是复制请求信息就不能成功了
    pengtdyd
    pengtdyd
    Nov 18, 2021❤️2
    42
    跟一帮废物共事,就是会遇到各种奇葩问题
    DeWjjj
    DeWjjj
    PRO
    Nov 18, 2021
    43
    主机都被劫持拿到 token 了,你说其他的还有意义嘛?
    这种角度的安防就别做了,用户的手机验证码已经给坏人监听了。
    咋了你这样防只会防到正常用户,最多就是加一个浏览器版本和 ID 。
    其他的做了,会干扰正常用户。
    moreant
    moreant
    Nov 18, 2021
    44
    ≈短信验证码被盗引发的数据安全问题( doge
    karloku
    karloku
    Nov 18, 2021
    45
    管理员被绑架引发的数据安全问题(
    aliveyang
    aliveyang
    Nov 18, 2021
    46
    token:"我" 越权了 "我" ?
    xuxuxu123
    xuxuxu123
    Nov 18, 2021❤️1
    47
    我们系统是做了 ip 校验,登录时的 ip 和操作 ip 不一样就强制下线
    CloudMx
    CloudMx
    Nov 18, 2021
    48
    这兄弟是想证明垂直越权吧,貌似搞反了,常规操作,要拿也是拿低权限的身份识别信息(SessionID 、JWT 信息)去高权限的账号请求接口去替换,而不是拿高权限的身份去请求低身份请求。
    Jooooooooo
    Jooooooooo
    Nov 18, 2021
    49
    他拿 admin 的账户密码还能登录 admin 账户呢.
    huaxianyan
    huaxianyan
    Nov 18, 2021
    50
    拿没有权限的账号 token 替换 admin 用户的还能请求通过才能说明有垂直越权吧?
    yogogo
    yogogo
    Nov 18, 2021
    51
    是不是对越权理解不正确?
    xiaofan305
    xiaofan305
    Nov 18, 2021
    52
    以前貌似听说过一种叫做“浏览器指纹”的技术,可以用来做广告跟踪,或许可以用 token 和它绑定。不过这只是一种传说中的技术,感觉挺黑科技的,实际上如何不晓得。。。简单的做法就是 token 和用户 id 绑定,请求的时候把用户 id 也传过来。或者,可以设置多个 token 字段,让他们想复制都不知道要复制哪一个。
    twl007
    twl007
    Nov 18, 2021 via iPhone
    53
    这不等同于我拿了 admin 的账号和密码去登陆 admin 账号么……

    或者对 admin 账号做单独限制 用 one-time token 试试看
    xuanbg
    xuanbg
    Nov 18, 2021
    54
    这个是有办法的,只要 token 里面存储客户端指纹就可以解决。验证 token 的时候比对指纹,像这种 geust 的 token 换成 admin 的 token ,指纹比对就过不去。
    vivipure
    vivipure
    Nov 18, 2021
    55
    如果想达到这种测试用例的安全效果的话,必然会牺牲用户的使用体验。安全的意义主要在于加大用户破解成本,而不是保证绝对的安全,因为根本不存在绝对的安全。
    例如,我就见过客户端登陆时把密码直接加密 md5 再发送的情况。这种的确安全一点,但是没多大意义,如果有人通过 HTTPS 能直接获取你的登录密码了,那加个密还有屁用。
    HolaPz
    HolaPz
    Nov 18, 2021
    56
    最近看到一篇文章
    token 给 2 个 一个 token 一个 refreshToken
    token 时间过了 就用 refreshToken 重新获取 token
    token 放 Authentication ,refresh Token 放 cookie
    ajaxfunction
    ajaxfunction
    Nov 18, 2021
    57
    还有脑残人员让我把 waf 关掉,来 xss ,
    最后让我整改,说有高危 xss 漏洞,
    我 tm 上防火墙的目的就是过滤注入 xss 。

    让你把防盗门拆掉,他进去又指责你家不安全,没有防护措施。
    jones2000
    jones2000
    Nov 18, 2021❤️1
    58
    每个用户单独发证书,token 使用每个用户对应的证书加密。 这样就算替换了用户, 原来的 token 是无法解密的。
    yyysuo
    yyysuo
    Nov 18, 2021
    59
    等保就是瞎搞。
    Ansen
    Ansen
    Nov 18, 2021
    60
    算用户的机器码?
    RuLaiFo
    RuLaiFo
    Nov 19, 2021
    61
    那 guess 用户拿到了 admin 用户的密码去登陆,也需要识别出这个用户的 guess 用户🐶。
    binux
    binux
    Nov 19, 2021 via Android
    62
    如果你们接口有 PII ,用 admin token 读到了 guest 的 PII 也算是越权了。
    FightPig
    FightPig
    Nov 19, 2021
    63
    这个,好奇最后 怎么解决
    veike
    veike
    Nov 19, 2021 via Android
    64
    @jones2000 服务器端怎么知道拿哪个用户密钥解 token ?
    Firxiao
    Firxiao
    Nov 19, 2021 via iPhone
    65
    这得看你们用的是什么类型的 token.
    如果是 Bearer Token ,那测试人员提出的无意义.
    如果 token 中不包含用户信息,是账号+token 认证,那么确实会有安全隐患.
    就好比你大街上捡了把钥匙,你得知道这个钥匙对应哪户人家.
    murmur
    murmur
    Nov 19, 2021
    66
    这测试太 tm sb 了,要说唯一的缺点,就是关键用户没有多因子认证,我如果管理员是密码+手机,然后你还拿 token 去复制

    那只能说 sb
    murmur
    murmur
    Nov 19, 2021
    67
    管理员就是管理员,普通账号的信息都读不到叫什么管理员,现在都是实名制,出现啥问题还要上级汇报,凭啥管理员不能读普通用户的身份信息。。
    mannixSuo
    mannixSuo
    Nov 19, 2021
    68
    @liuzhen 安全性和便利性,看怎么取舍了
    mannixSuo
    mannixSuo
    Nov 19, 2021
    69
    @deplivesb 银行这种强调安全性应用,这样搞我觉得一点问题没有
    maskerTUI
    maskerTUI
    Nov 19, 2021
    70
    教一下那些等保人员,用高权限请求了成功低权限用户的数据不叫越权,用低权限请求成功了高权限用户的数据才叫越权,名叫“垂直越权”;再给他们科普一下还有一个东西叫“平行越权”。
    onionlc
    onionlc
    Nov 19, 2021
    71
    啊,我司也在过二级等保,测评人员没测这种问题;
    大家伙都是过三级等保的吗
    shaojz2005
    shaojz2005
    Nov 19, 2021
    72
    等保要的是分数而已,不代表所有的问题都要整改。
    fengpan567
    fengpan567
    Nov 19, 2021
    73
    你们测试真逗
    Huelse
    Huelse
    Nov 19, 2021
    74
    别提了,之前遇到了银行的测试,说这个请求复制 cookie 就能用工具复现了,不安全
    nxforce
    nxforce
    Nov 19, 2021
    75
    单 token 也不行的啦,还有个每次请求都生成一个随机校验 id ,服务端校验
    wat4me
    wat4me
    Nov 19, 2021
    76
    是同一台机器不,同一台机器切换浏览器也应该要掉线吧
    Felldeadbird
    Felldeadbird
    Nov 19, 2021
    77
    你家里有一把钥匙。平时你带着,其他人不可能开门。

    有一天,你出门时钥匙掉地上了。被张三捡了了,于是乎你家被张三进去了。

    ---

    所以我认为修复方案就是 token 加上用户设备识别。 例如上面按理,钥匙加一个 NFC 识别。张三捡到,但是没有 NFC 识别是钥匙主人,他还是开不了锁。
    ganbuliao
    ganbuliao
    Nov 19, 2021
    78
    你们就直接给他们 guest 权限就好了 别让他们知道有 admin 权限
    jones2000
    jones2000
    Nov 19, 2021
    79
    @veike 请求数据的时候把账号名也发过去。
    byte10
    byte10
    Nov 19, 2021
    80
    @Felldeadbird 一会儿 测试人员会说,张三又捡到了你的手机 NFC 呢。 那些土鸡是教不了的,脑子的问题,非常的烂。
    @liuzhen 这个社会就是存在很多这样的人,脑子逻辑思维非常的差,脱了裤子放屁的事情经常干。我很难过,为啥教不懂他们呢,稍微正常的脑子就能理解的事情。
    @coosir 你错了,测试人员会把 user_name 也替换成 admin ,然后又来盘你。
    @karloku 是的这个回答最经典,那群土鸡会假设管理员被绑架了,被绑匪盘出密码了,然后他们会得到结论绑匪居然使用密码能正常登录,现实中有太多这样的人了。
    ookkxw
    ookkxw
    Nov 19, 2021
    81
    最简单的方案应是做 2 个门,guest 和 admin 的钥匙只能开对应的门😄
    zliea
    zliea
    Nov 19, 2021
    82
    @defunct9 要用 sudo ,不要 root 登录
    IvanLi127
    IvanLi127
    Nov 19, 2021
    83
    再加一个 token 呗,这样 guest 拿到原先的 token 直接请求,就能因为另一个 token 校验不通过而被拦截了。 如果他再说这问题,就继续加 token ,加到他测哭了就行。
    est
    est
    Nov 19, 2021
    84
    要你加你就加。那么多废话干嘛。反正麻烦的是用户。加完了你在注释里写一句 XXX 傻吊 就完事了。
    clf
    clf
    Nov 19, 2021
    85
    设备-IP-UA 信息二次校验,同个 token 签发的时候记录前面的信息,后续请求不一致的时候就拦截,如果伪装到一致了,那就只能当作一致了呗。

    或者是只记录这样的行为,做好预警,视情况主动踢下线。
    tabris17
    tabris17
    Nov 19, 2021
    86
    伞柄测试不用理它
    defunct9
    defunct9
    Nov 19, 2021
    87
    @ztechstack sudo 有啊,人非让改掉 root 名,说容易被人猜到。
    zliea
    zliea
    Nov 19, 2021
    88
    @defunct9 禁止 root 登录,linux 系统不可能没有 root 。
    conhost
    conhost
    Nov 19, 2021
    89
    @IvanLi127 最简单的难道不是直接用 token 对 body 做个摘要,然后把这个摘要挂在 body 上,这样简单替换 token 就没用了
    defunct9
    defunct9
    Nov 19, 2021
    90
    @ztechstack 禁止 root 登录了啊,人非让改掉。
    gps949
    gps949
    Nov 19, 2021
    91
    讨论具体这个问题前,你先需要区分两个概念:“安全” & “合规”。
    合规不一定安全。安全不一定合规。不安全不一定不合规。不合规不一定不安全。

    所谓合规,就是要按照测评认证机构(的人员)的要求做,假设他们说 C 不行 Java 可以,你就得用 Java ,假设他们说 JS 不行 PHP 可以,你就得用 PHP ,就是这么个事。
    IvanLi127
    IvanLi127
    Nov 19, 2021
    92
    @conhost 有道理,用 token 对 body 签名。不过我感觉把摘要挂在 header 里会简单点,这样就不用关心 body 内容了,直接对 body 文本签名就好了。
    Jf35jxN3fwBXyeLh
    Jf35jxN3fwBXyeLh
    Nov 19, 2021
    93
    请求参数加签 + 绑定设备 id ,后端校验。前端上 jsvmp ,确保加签算法不会被逆向或黑盒调,设备 id 算法同理
    Mark24
    Mark24
    Nov 19, 2021
    94
    这就是古代的兵符。

    只认令牌,不认人。

    自己把令牌拱手让人了。怎么说。反正令牌自己没毛病。


    用户应该用 HTTPS 、用自己的密码、浏览器密码 保护自己的程序不不被复制。
    你为什么要允许别人复制你机器上的东西。

    这里要被修改的不是程序,而是要培训使用者的安全意识。

    就像存折密码,不要随便告诉他人一样的道理。
    cnbattle
    cnbattle
    Nov 19, 2021
    95
    让前端把 token 放内存里 类似 vue vuex 的实现,不要本地存储
    mytsing520
    mytsing520
    PRO
    Nov 19, 2021
    96
    @ajaxfunction
    分享一下我的想法,仅为个人意见:
    关闭 WAF 测试实际上他们是在帮你测了 WAF 不可用的场景下的问题。某种意义上也算合理,毕竟鸡蛋不能放一个篮子里。
    以后新出现的 XSS 的漏洞暂且不论。
    jetpy
    jetpy
    Nov 19, 2021
    97
    可以考虑使用动态 token
    itechnology
    itechnology
    Nov 19, 2021
    98
    这测试有点逗吧,guest 拿到 admin 的 token ,那这时候 guest 就充当 admin 的用户角色了。我觉得你 3 楼说的有道理:“等于是要求你把你家钥匙给张三,要求张三去开门的时候开不了”
    Lemeng
    Lemeng
    Nov 19, 2021
    99
    动态的靠谱,要不人脸
    conhost
    conhost
    Nov 19, 2021
    100
    @itechnology 这种要求也不能说逗吧,也许跟个人对安全的理念不一样呢?不然现在为什么会出现双因子认证呢?
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2743 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 160ms · UTC 10:41 · PVG 18:41 · LAX 02:41 · JFK 05:41
    ♥ Do have faith in what you're doing.