3

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

 2 years ago
source link: https://www.v2ex.com/t/816341
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  信息安全

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

  liuzhen · 5 小时 47 分钟前 via Android · 2314 次点击
最近在过等保,测试人员拿 admin 用户的 token 替换到了 guess 用户的请求头里,得出一个存在越权的结论,给的修复方案是: 对所有用户功能基于 sessionid 判断用户权限。

但我寻思 sessionid 不也存在浏览器端吗,一样可以被等保测试人员拿到放在其他用户的请求里伪装 admin 用户
56 条回复    2021-11-18 22:38:16 +08:00

hhyygg

hhyygg   5 小时 41 分钟前

如果用了 Token ,那 Token 不就是作为 SessionID 了吗?

lniwn

lniwn   5 小时 40 分钟前 via iPhone

那么问题来了,guest 用户使用了 admin 的 token ,拿它还是原来那个 guest 用户么?

gadfly3173

gadfly3173   5 小时 39 分钟前   ❤️ 1

这个测试方法不是变成强行 CSRF 了么。。。

liuzhen

liuzhen   5 小时 37 分钟前 via Android

@hhyygg 等保人员就是用大权限的用户的 token 覆盖到小权限的用户 token ,再去请求接口数据,要求识别出这个请求是小权限用户的。这不是脱了裤子放屁嘛,等于是要求你把你家钥匙给张三,要求张三去开门的时候开不了

liuzhen

liuzhen   5 小时 37 分钟前 via Android

@lniwn 就是要求你还能识别出它是原来的 guest 用户

gadfly3173

gadfly3173   5 小时 37 分钟前

按照这个说法,这个测试提的想法和传说中的 app 检测手机壳颜色一样了,打破第四面墙去检测屏幕之外的人。。。

HelloWorld556

HelloWorld556   5 小时 35 分钟前

加个人脸识别吧

ReysC

ReysC   5 小时 35 分钟前   ❤️ 1

token rename to sessionid

wolfie

wolfie   5 小时 32 分钟前

这个简单,每次接口请求前,弹窗输入当前用户密码就行了。🐶🐶

lniwn

lniwn   5 小时 32 分钟前 via iPhone

@liuzhen 明显测试人员没有理解 token 的意义。说个偏门,token 换成 admin 了,那用户就是 admin ,前段显示 guest ,是前端的 bug[🐶]

darknoll

darknoll   5 小时 32 分钟前

这帮人啥都不懂啊

mannixSuo

mannixSuo   5 小时 31 分钟前

token 里面放个用户的 IP ,判断下请求 IP 和 token 里面的 ip ?

coosir

coosir   5 小时 24 分钟前   ❤️ 1

user_name + token 组合判断,他们替换就没用了,哈哈哈

rockyliang

rockyliang   5 小时 24 分钟前

@mannixSuo 在使用产品过程中用户的 IP 地址有可能会变的,如果 IP 一变就要求用户重新登录,体验会很不好

liuzhen

liuzhen   5 小时 21 分钟前 via Android

@mannixSuo IP 不行啊,服务器收到的同一个路由器下的不同电脑的 IP 是一样的,而且 WiFi 切到 4g 肯定会变 IP ,就让用户重新登录不够友好

kiracyan

kiracyan   5 小时 19 分钟前

token 绑定设备 UA 或者唯一的客户端码 换了就重新登录

liuzhen

liuzhen   5 小时 17 分钟前 via Android

@kiracyan 客户端就是 web 浏览器

DoraMouse

DoraMouse   5 小时 17 分钟前

token 这里可以理解成打开门的钥匙,如果拿管理员的钥匙能打开管理员才能开的门,那这不是很正常的事,跟门有啥关系。

sprite82sprite82   5 小时 17 分钟前

等保这帮人就这样的,很 sb ,比如拿 admin 用户的页面 抽出部分 html , 给嵌入到 guest 用户的页面中,告诉我,你这个权限越权了

x86

x86   5 小时 17 分钟前

人才,token 拉取的是权限...用户信息没变?

Trim21

Trim21   5 小时 16 分钟前 via Android

要求使用管理员用户密码无法登录为管理员,彻底解决用户帐号密码泄漏问题。

Foxii

Foxii   5 小时 15 分钟前 via Android

利用前端 bug 类似的机制跳转以骗过等保人员

liuzhen

liuzhen   5 小时 14 分钟前 via Android

@sprite82 难搞,你们最后是怎么解决的呢?

ila

ila   5 小时 14 分钟前 via Android

用 pc 端吧

liuzhen

liuzhen   5 小时 13 分钟前 via Android

@Foxii 他们是在类似 postman 的工具上 copy token 测的

cheng6563

cheng6563   5 小时 11 分钟前

等保的还叫我们关掉 keep-alive ,但我们用的是 HTTP2 。

deplivesbdeplivesb   5 小时 10 分钟前

#12 楼这个兄弟是招行出来的吧,我招行 app 每次都会遇到 Face ID 登录之后点个都叫我重新登录一次

Foxii

Foxii   5 小时 8 分钟前 via Android

@liuzhen 那个工具它有木有默认的 ua 比如 postman 就有

sprite82

sprite82   5 小时 7 分钟前

@liuzhen 没得搞,让项目经理去晓之以情动之以理, 理由:强行修改 html 是没办法控制的,另外虽然加入了不属于 guest 用户的页面,但是用户请求后台也是没用的,有权限控制的。而且,你都同时有 admin 和 guest 的账号了,哪怕 guest 没权限做破坏,admin 也可以继续搞事,无解,这测试方式就不合理

dzdh

dzdh   5 小时 7 分钟前

车钥匙被盗引起的汽车被偷问题

whosesmile

whosesmile   5 小时 7 分钟前

有个中间办法类似银行的 APP ,如果你切换网络需要重新登陆,也就是检测 IP 之类的信息,但是如果安全员就在同一个设备上双开浏览器,暂时想不到办法。

defunct9

defunct9   5 小时 5 分钟前

等保的让我们改掉 root 用户的用户名,不能叫 root 。

Foxii

Foxii   5 小时 5 分钟前 via Android

token 过期设置为 0.5 秒前端 0.1 秒刷新一次,比的就是等保人员的手速

whosesmile

whosesmile   5 小时 3 分钟前

没注意已经有人提了这个思路了,想到了如果只是想骗过等保测试,无非是把门槛拉高,比如你每次请求都加一个 CSRF TOKEN ,但是如果测试人员每次都有办法复制所有的请求头,那就是扯淡的事了,HTTP 没来就无状态,无解的事情。

marcong95

marcong95   5 小时 2 分钟前

把 token 放 sessionID 里?

Foxii

Foxii   5 小时 1 分钟前 via Android

@whosesmile 确实只能骗,因为本来就没啥问题

misaka19000

misaka19000   5 小时 1 分钟前

加设备识别

liuzhen

liuzhen   5 小时 0 分钟前 via Android

@Foxii 上有政策下有对策,这也是没有办法的办法了

liuidetmks

liuidetmks   4 小时 54 分钟前

随机 nonce + token + 其他业务参 与 参数校验吧?

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

如果手里有项目源码,写的代码测试.那就~

eason1874

eason1874   4 小时 46 分钟前

对浏览器来说 SessionID 和 Token 唯一区别就是字段名不一样。这测试水平不咋滴,搞不好你改个名字就完事了

如果是前后端分离的,可以在登录时存一个 key 到 localStorage ,每次请求都用它签一个 RequestId 带上,服务端记录 RequestId ,同一 SessionID/Token 在一段时间内使用重复的 RequestId 直接 403 。这样搞,只是复制请求信息就不能成功了

pengtdyd

pengtdyd   4 小时 39 分钟前   ❤️ 1

跟一帮废物共事,就是会遇到各种奇葩问题

DeWjjj

DeWjjj   4 小时 32 分钟前

主机都被劫持拿到 token 了,你说其他的还有意义嘛?
这种角度的安防就别做了,用户的手机验证码已经给坏人监听了。
咋了你这样防只会防到正常用户,最多就是加一个浏览器版本和 ID 。
其他的做了,会干扰正常用户。

moreant

moreant   3 小时 42 分钟前

≈短信验证码被盗引发的数据安全问题( doge

karloku

karloku   3 小时 19 分钟前

管理员被绑架引发的数据安全问题(

aliveyang

aliveyang   3 小时 3 分钟前

token:"我" 越权了 "我" ?

xuxuxu123

xuxuxu123   2 小时 58 分钟前

我们系统是做了 ip 校验,登录时的 ip 和操作 ip 不一样就强制下线

CloudMx

CloudMx   2 小时 7 分钟前

这兄弟是想证明垂直越权吧,貌似搞反了,常规操作,要拿也是拿低权限的身份识别信息(SessionID 、JWT 信息)去高权限的账号请求接口去替换,而不是拿高权限的身份去请求低身份请求。

Jooooooooo

Jooooooooo   1 小时 59 分钟前

他拿 admin 的账户密码还能登录 admin 账户呢.

huaxianyan

huaxianyan   1 小时 49 分钟前

拿没有权限的账号 token 替换 admin 用户的还能请求通过才能说明有垂直越权吧?

yogogo

yogogo   1 小时 46 分钟前

是不是对越权理解不正确?

xiaofan305

xiaofan305   1 小时 29 分钟前

以前貌似听说过一种叫做“浏览器指纹”的技术,可以用来做广告跟踪,或许可以用 token 和它绑定。不过这只是一种传说中的技术,感觉挺黑科技的,实际上如何不晓得。。。简单的做法就是 token 和用户 id 绑定,请求的时候把用户 id 也传过来。或者,可以设置多个 token 字段,让他们想复制都不知道要复制哪一个。

twl007

twl007   1 小时 2 分钟前 via iPhone

这不等同于我拿了 admin 的账号和密码去登陆 admin 账号么……

或者对 admin 账号做单独限制 用 one-time token 试试看

xuanbg

xuanbg   49 分钟前

这个是有办法的,只要 token 里面存储客户端指纹就可以解决。验证 token 的时候比对指纹,像这种 geust 的 token 换成 admin 的 token ,指纹比对就过不去。

vivipure

vivipure   26 分钟前

如果想达到这种测试用例的安全效果的话,必然会牺牲用户的使用体验。安全的意义主要在于加大用户破解成本,而不是保证绝对的安全,因为根本不存在绝对的安全。
例如,我就见过客户端登陆时把密码直接加密 md5 再发送的情况。这种的确安全一点,但是没多大意义,如果有人通过 HTTPS 能直接获取你的登录密码了,那加个密还有屁用。

HolaPz

HolaPz   15 分钟前

最近看到一篇文章
token 给 2 个 一个 token 一个 refreshToken
token 时间过了 就用 refreshToken 重新获取 token
token 放 Authentication ,refresh Token 放 cookie

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK