























这是一个创建于 509 天前的主题,其中的信息可能已经有所发展或是发生改变。
2 javalaw2010 2025 年 1 月 21 日在绝大部分场景下,我推崇方案 1 ,如果有产品端/安全端的特殊需求,我会考虑方案 3 ,只有再极少数场景下,比如日志追踪等,我会考虑 2 |
4 4Et5ShxMIq58n6Lr 2025 年 1 月 21 日我(前端)做过的功能,后端给几乎都是用的自增 ID ,极少数场景才会用 2 ,其他目前没遇到 |
5 felix9ia 2025 年 1 月 21 日@javalaw2010 是的,不好意思,我刚刚改了一下。 其实方案 1 的自增有明显的缺陷,不应该被推荐把? 用 sqids 加盐我觉得也是少数场景,比如用户主页这种。 |
6 CHTuring 2025 年 1 月 21 日2 就够用了,还是像楼上说的,只要不是自增就行了。 |
8 felix9ia 2025 年 1 月 21 日方案 4 有一个好处就是,定期更换盐,可以让链接失效,当然让链接失效有好处也有坏处 |
10 javalaw2010 2025 年 1 月 21 日自增 id 除了暴露数据量之外,其他我也没觉得会有啥缺陷,而“暴露数据量”这件事也只有少数场景下才值得被关注,这些场景下就需要具体问题具体分析,比如订单相关场景,其实订单号比 ID 更像事实上的主键(我个人喜欢在绝大多数场景下都保留自增 ID ),业务上基本使用订单号而非主键。 |
11 iyiluo 2025 年 1 月 21 日肯定不能用自增,首先安全那关就过不去,可以被黑产猜测到数据,遇到爬虫,直接把你整个业务的数据都扒下来。用 md5, uuid, 雪花都行 |
12 anonydmer 2025 年 1 月 21 日目前项目都用 ULID |
13 musi 2025 年 1 月 21 日暴露自增 id 有什么问题吗? |
14 justseemore 2025 年 1 月 21 日数字没问题啊, 只要不是自增就行 足够大 轮训不全的. |
19 kingcanfish 2025 年 1 月 21 日 |
24 BeijingBaby 2025 年 1 月 21 日安全性上讲,无所谓自增,有人说方便爬取,想多了。你随机 id 要爬取你也能爬到啊,只要数据是公开的,和自增和随机的没任何区别。 |
25 zt5b79527 2025 年 1 月 21 日@dylanqqt 简单来说,别人能猜到你的数据量。比如说订单号自增,竞争对手就能知道你的订单量。比如之前 b 站的 bv 号,最初好像也是自增的,竞争对手就能知道平台的投稿量,后来就换成随机的了(应该不全是这个原因,但是肯定有这方面的考量) |
26 esee 2025 年 1 月 21 日主键用的自增 ID, 后端接口查询的时候,sql 语句对 id 加密查询出来,我是这样做的. |
28 zjsxwc 2025 年 1 月 21 日自增 id 方便调试和 dba 维护,大部分时候自增 id 就够用了, |
29 wangtian2020 2025 年 1 月 21 日可以暴露,暴露在 url 中与暴露在请求体里有什么区别。 |
31 chendy 2025 年 1 月 21 日暴露 id 本身没啥问题 |
32 yelog 2025 年 1 月 21 日@dylanqqt 容易被暴力攻击越权漏洞, 假如微博的私信列表有越权漏洞 你在进入微博的私信页面, 发现获取私信列表的接口是 weibo.com/p_message/16645, 然后你把最后的数字(id) 改为 1, 发现获取到管理员 admin 的私信列表了哈哈哈, 然后依次加 1, 可以非常快把微博的所有用户的私信列表全部下载下来 如果不是自增的, 比如 UUID, 尽管知道这个接口越权漏洞, 但是鉴于 UUID 的随机性和位数, 用户隐私泄漏的风险就非常小 |
33 TimePPT 2025 年 1 月 21 日 |
35 liuidetmks 2025 年 1 月 21 日@dylanqqt 从 1w 开始,并不能起到很大作用,人家只有作差分就能获取你某段时间内业务规模了 |
36 importmeta 2025 年 1 月 21 日里面逻辑再拿用户 id,加一层保险 |
37 SoyaDokio 2025 年 1 月 21 日根据 RESTful 语义原则,当然是把 ID 放在 URL 里更好,但仅限于 UUID 或其他类似主键。 |
38 default996 2025 年 1 月 21 日通常建表时我会创建 id,created_at, updated_at |
39 Reficul 2025 年 1 月 21 日自增 ID 可能会暴露你们业务一天有多少数据,比如订单量之类的。之前我们懒惰 fix 这个问题的方法是随机跳过部分数字来给数据投毒。 |
40 voy 2025 年 1 月 21 日hackernews is self increased. done. |
41 forty 2025 年 1 月 21 日有时候杀鸡用不上牛刀。 其实还有 1 种简单方案,叫 hashid, 几十种语言的实现都有, github 可用搜到,可以在纯数字和"hashid"之间互相转换,既不直接暴露主键数字 id 给前端,无法被人直接遍历,同时也不增加后端复杂度。 原来 @cxxlxx 已经提出来了,刚开始没注意到。 |
42 thinkershare 2025 年 1 月 21 日自增的也无所谓,需要安全的地方,需要其它权限鉴定逻辑。 |
43 ntedshen 2025 年 1 月 21 日如果你用 innodb 的话,可以把 update 全部改成 insert ignore on duplate update ,你就能得到一个超音速自增的主键(狗头 |
44 Zcyisabigman 2025 年 1 月 21 日用自增的一些缺点: |
45 chairuosen 2025 年 1 月 21 日要看业务是不是数据都公开,京东的商品,论坛的帖子,这种无所谓。资源要做隔离的就需要考虑隐藏了 |
46 xuelu520 2025 年 1 月 21 日暴露有什么影响吗? |
47 nekochyan 2025 年 1 月 21 日我们有个项目是直接用 ID 异或一个较大的数给前端就行了,然后再异或回来 |
48 zt5b79527 2025 年 1 月 21 日@dylanqqt #30 单单业务规模这一点,确实对小公司可能不算什么,那大公司呢?如果是年营收上百亿,竞争对手虎视眈眈的上市公司呢?对于大公司来说,安全才是第一位的。竞争对手可能已经通过各种渠道收集了你各种各样的信息,再加上这一点交叉验证,底裤都给你扒出来。 |
50 yh7gdiaYW 2025 年 1 月 21 日看完这贴我就把 v 站的第 1,10,100,1000,10000,100000,1000000 贴看了一遍 |
51 chengran630 2025 年 1 月 21 日 |
52 xuanbg 2025 年 1 月 21 日不连续就行了 |
53 spike0100 2025 年 1 月 21 日 via iPhone可以考虑 hashids 对主键进行映射 |
56 xiaomushen 2025 年 1 月 22 日1. 不是自增就行 |
57 kakki 2025 年 1 月 22 日自增危险是你的接口处理权限有问题,就和"把某个东西藏起来不想让别人找到"在应用密码学里面提到过是一件不靠谱的事情,做好接口防范才是正道. |
58 barbery 2025 年 1 月 22 日2 楼正解 |
59 zpf124 2025 年 1 月 22 日主键暴露不暴露得看你的主键有什么意义。 像淘宝京东这类 电商,他们肯定不希望可以从订单号看出什么规律,且不说万一有什么权限 bug ,导致瞎拼的 id 可以访问到其它人的数据,但从规律自增让其它竞争对手可以统计他们每日交易量就是个大风险。 |
60 Torpedo 2025 年 1 月 22 日id 暴露很正常,但是还是不要暴露自增的吧 |
61 iyaozhen 2025 年 1 月 22 日不要自增就行,不然要是有漏洞会被一下子遍历走 而且竞争对手能知道你的业务量了 |
62 TonyDutton 2025 年 1 月 22 日通过 hashids 装饰自增主键再暴露的方案是否有点自欺欺人?采用这样的方案一般就不会再更改盐值了,盐值对内部开发来说都是可获取的硬编码(),那么总有一天盐值会被暴露到外部 |
63 yuezk 2025 年 1 月 22 日@dylanqqt #54 京东这个页面是所有人都可以查看的,并不涉及权限验证,用自增问题不大。如果涉及权限验证,你再用自增,就有可能(比如,权限验证有漏洞)被别人猜到 ID ,然后越权访问。但是,如果用 UUID ,即便权限验证有漏洞,也很难被别人利用。这一点,#32 楼已经说的很清楚了 |
65 tabc2tgacd 2025 年 1 月 22 日会暴露业务详情的有规律生成的 id 不应该被暴露。比如用户 ID 用了自增的,那可以猜出你有多少用户之类的。 |
67 Wuuuu 2025 年 1 月 22 日如果数据库又想自增,展示又怕暴露可以试试 hashids 的库 |
68 liuidetmks 2025 年 1 月 23 日@dylanqqt 接口配置是错误,自增 id 是放大了这种错误 系统内部状态一般尽量少向外暴露避免被利用,典型的例子就是长度扩展攻击伪造签名 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。