请教各位下 将用户的 id 在 jwt 中 算是敏感信息么?

2022-12-02 09:45:25 +08:00
 hi20151215x

程序是通过解析 jwt 中的用户 userId , 进行查询的


select * from orders where ownerid = #userId

但是看网上说 不建议将敏感信息 放入 jwt 中, 现在我有点迷惑 这个 userId 到底算不算敏感信息?

说敏感吧,毕竟有 sha256+secret key 加密。 说不敏感吧,如果换成别的 userId ,就可以查询其他用户的信息。

6525 次点击
所在节点    信息安全
61 条回复
watzds
2022-12-02 14:12:10 +08:00
你是不懂 jwt 的,也不懂加密和认证
lanlanye
2022-12-02 14:13:46 +08:00
不得不翻出我好多年前读的文章了 [你会做 WEB 上的用户登录功能吗?]( https://coolshell.cn/articles/5353.html)
lanlanye
2022-12-02 14:19:18 +08:00
@lanlanye
发完意识到这篇文章没提 JWT ,补充一下:
1. JWT 的意义是保证数据完整性,只能存放公开的信息,user_id 这种东西看场景,大部分时候应该是可以公开的
2. JWT 是无状态的,需要设置较短的有效期,签发后无法在有效期内收回
3. 尽量不要通过在服务端保存签出的 JWT 这种方式来控制其有效性,因为这会使 JWT 失去它无状态的特点,不如直接用回 cookie-session 那一套
tool2d
2022-12-02 14:42:36 +08:00
@mayday526 你既然说了使用场景不一样,说明还是能看懂我说的。

https://en.wikipedia.org/wiki/JSON_Web_Token ,里面有一段 use 案例描述,写了有传统后端验证外,还有客户端直接发起 JWT 身份验证两种方式。

作为后者,很适合匿名账户纯客户端直接认证。私钥又不需要在网络传输,只有用户自己能看见,本机不泄漏,就很安全。
superliy
2022-12-02 14:49:49 +08:00
sha256+secret key 这里加密 不是因为敏感而是用于数据校验,不被串改。。你理解方向歪了。。。
JamChiu
2022-12-02 15:22:14 +08:00
jwt 存放的内容本来就敏感,但是加密了,你解密不了也没用,所以有需要就放,没需要就不放~
leonshaw
2022-12-02 16:15:08 +08:00
敏感不敏感是保密性,能不能篡改是完整性,注意区分。
通常所说的 JWT 只保证完整性,关于加密了解下 JWE.
JasperYanky
2022-12-02 18:00:57 +08:00
说个不太显眼的用途,如果 userid 是显性连续的,投资机构会用这个估算产品真实的用户规模
gzf6
2022-12-02 18:38:48 +08:00
后端用唯一用户名查询 ID?
GeruzoniAnsasu
2022-12-02 20:18:54 +08:00
看了这么多楼回复我感觉我也不知道怎么吐槽了


- jwt 本身就是鉴权的令牌,换句话说它本身就是用来防止「知道 userID 查到别的用户信息」的关键设施
- jwt 的关键信息是已登录用户的签名,签名是不可伪造的。至于怎么个不可伪造以及签名如何使用,你们所说的「具体场景有不同用法」,但根本逻辑不会变:通过不可伪造的唯一签名来标识当前请求者是谁
- jwt 不防 csrf

我觉得抓住这三点就够了
rekulas
2022-12-02 20:47:00 +08:00
jwt 的存在不就是为了让分布式节点脱离数据库也能认证么(安全传递令牌或身份验证信息),当然可以存放私有信息比如 uid (除非你有特殊要求比如普通节点禁止获取用户信息,不在此话题讨论内),如果啥用户信息都不想存放而是放一个映射 id 那用 jwt 的意义是什么,不如直接 token 一把梭
darknoll
2022-12-02 21:14:00 +08:00
@tool2d 我醉了
zhaogaz
2022-12-02 21:22:02 +08:00
。。。楼主说的 jwt 内容有事实性错误。。。,建议在学习一下,有标准 rfc 的。。。

如果你想把 user ID 藏起来可以用 JWE

id 这种一般算是一般信息,不算敏感,也没必要加密。如果 id 是身份证号那种,那是有必要加密的,让然用它做 id 也不太对。

如果你随便换个 id 能查到其他人信息,这个问题是权限问题。。。

这几句话问题太多了。
eason1874
2022-12-02 21:38:59 +08:00
1 、用户 ID 不算隐私信息,前提是用户 ID 是系统自动生成的,而非邮箱、手机号、身份证号这些用户隐私信息

2 、“换成别的 userId 就可以查询其他用户的信息” 要是这样,就说明你们的 jwt 鉴权逻辑有问题,正常的 jwt 换了一个字节都会导致签名不一样,从而无法通过鉴权
ixixi
2022-12-02 23:01:41 +08:00
觉得有点裸露可以把 userId 用 aes 加密一下 用的时候解密 不影响整体
urnoob
2022-12-02 23:12:57 +08:00
jwt 延生带用户信息的叫 openid ,一般就是 uniqueid 通常是 uuid 或者加上用户的姓名等非敏感信息。这个 openid 的 token 在获取时通常需要用户授权,权限列表中如果包含查询用户信息,那么这个 token 才可以拿来查询更多用户信息入 email 电话等等
mmdsun
2022-12-02 23:47:00 +08:00
如果换成别的 userId ,就可以查询其他用户的信息??
难道不做验签吗?纂改了还能通过 jwt 校验?

还有那些放信息去 redis 的 那为啥不直接用 session 呢。 本来 jwt 就是节约服务期资源的
1423
2022-12-03 00:28:17 +08:00
需要加密的话,稍微想一下,这跟 ss 的协议设计可能有一样的问题
最终解法可能是 AEAD 。
不考虑 jwt 原本的 Signature 。而是将 AEAD 后的结果给到客户端。
edis0n0
2022-12-03 01:11:35 +08:00
@JasperYanky #48 我前两周做的外包就要求 userid 增量每次随机 1~50
JaguarJack
2022-12-03 11:54:00 +08:00
串改也没用啊。jwt 需要校验。token 是通过 userid=1 生成。改了数据,校验就过不去啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/899520

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX