活动分享码直接使用 snowflake 生成的 ID 是否存在什么安全隐患?

2019-09-12 13:24:09 +08:00
 kid1412621

分享码和用户绑定,唯一且固定,无其它额外需求。

5514 次点击
所在节点    Java
28 条回复
momocraft
2019-09-12 13:54:44 +08:00
snowflake 的设计目的是短且(无恶意使用时)避免碰撞。

如果被枚举也没关系就没关系,否则可能 hash/uuid4 好一些。
kid1412621
2019-09-12 14:10:02 +08:00
@momocraft 谢谢, 但为什么会好些呢? uuid4 我看是降低碰撞, snowflake 应该是能完全避免碰撞吧(1s 内多少次)
IamNotShady
2019-09-12 14:13:34 +08:00
维护好机器 ID 和数据中心 ID 一般没问题
kid1412621
2019-09-12 14:15:05 +08:00
@momocraft 有点懂了,是否是因为 snowflake 的生成是可预测的呢?就有可能被枚举来使用
kid1412621
2019-09-12 14:16:36 +08:00
@IamNotShady 嗯, 如果这个 id 同时是用户在系统中的唯一标识, 会有什么设计上的缺陷吗?
Mithril
2019-09-12 14:20:48 +08:00
@kid1412621 最好不要暴露这个 ID,会有安全隐患。这个值可以被猜到,也可以自己计算出来一个可能不存在的 ID。如果你其他地方没有全部做好验证,那就可能给你插进来几条错误数据。
直接随机对称加密一下就好了。
IamNotShady
2019-09-12 14:21:07 +08:00
@kid1412621 一楼说的对 我没认真审题 这种需求场景不适合用 snowflake hash/uuid4 是更好的选择
kid1412621
2019-09-12 14:32:50 +08:00
@Mithril 嗯, 但为什么要对称加密呢? secure hash 呢?
kid1412621
2019-09-12 14:43:02 +08:00
@IamNotShady @momocraft
再谢, 但 uuid 有些过长了, 有什么好的方式变短些并保证唯一性吗?
ryV60s
2019-09-12 15:19:56 +08:00
hashids 是否符合需求。
LeeSeoung
2019-09-12 15:50:58 +08:00
可以看下 zfb 订单号
IamNotShady
2019-09-12 15:51:47 +08:00
@kid1412621 UUID 可以指定长度的
kid1412621
2019-09-12 16:02:52 +08:00
@ryV60s 看来下感觉不错, 我看文档说不用每次存 db, 通过每次加解密, 想问下你们项目使用也是类似需求吗? 是这么处理的
kid1412621
2019-09-12 16:05:17 +08:00
@LeeSeoung 那个感觉不太符合这场景, 而且也没必要过度设计
ryV60s
2019-09-12 16:09:12 +08:00
@kid1412621 #13 对啊 逻辑层面加密解密的,跟 db 没关系的。前端 id 都是用这个,防止爬虫遍历。
kid1412621
2019-09-12 16:20:52 +08:00
@IamNotShady 咦, 这倒第一次听说, uuid 不是规范吗? 这么指定长度呢? 不是截取吧?
kid1412621
2019-09-12 16:24:13 +08:00
@ryV60s 只是 id 用吗? 我这里需求是分享码呀,要在个人信息中返回, 不会每次返回都算一遍吧(不考虑缓存的话)
ryV60s
2019-09-12 16:36:54 +08:00
@kid1412621 #17 你们这需求简单点的话,直接用用户数据库 id 直接加密当分享码,前端传过来再解密就是用户数据库 id,至于具体逻辑看你们需求了。

我们是后端输出 id 给前端统一加密,前端传 id 过来后端统一处理解密,暂时是每个涉及 id 的接口都得处理加密解密。
当然需要不需要解密加密,缓存得看具体逻辑了。
IamNotShady
2019-09-12 16:46:18 +08:00
IamNotShady
2019-09-12 16:50:35 +08:00
@kid1412621 如果你用 base62 可以压的更短

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

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

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

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

© 2021 V2EX