应不应该把主键 id 暴露在 url 上?

229 天前
 felix9ia

想请教一下大家是怎么做的?

比如访问一个电商网站的店铺页面的 url:

方式 1:使用自增的主键 id xxx/shop/123

方式 2:使用雪花主键 id 或者 guid

xxx/shop/1881238297653633026

xxx/shop/85d93ea0-3d43-48c5-99ec-e11f54655228

方式 3: 使用业务编号

xxx/shop/st_003

方式 4:

用 sqids 把所有的实体主键 id(private_id) 在转换 VO 时加盐转换成 (public_id) 返回给前端

相关讨论: https://www.reddit.com/r/csharp/comments/rg7xob/is_it_bad_to_expose_primary_key_to_the_user_if/

9124 次点击
所在节点    Web Dev
68 条回复
forty
228 天前
有时候杀鸡用不上牛刀。

其实还有 1 种简单方案,叫 hashid, 几十种语言的实现都有, github 可用搜到,可以在纯数字和"hashid"之间互相转换,既不直接暴露主键数字 id 给前端,无法被人直接遍历,同时也不增加后端复杂度。
Hashids 改名叫 Sqids 了. https://sqids.org/

原来 @cxxlxx 已经提出来了,刚开始没注意到。
thinkershare
228 天前
自增的也无所谓,需要安全的地方,需要其它权限鉴定逻辑。
ntedshen
228 天前
如果你用 innodb 的话,可以把 update 全部改成 insert ignore on duplate update ,你就能得到一个超音速自增的主键(狗头
Zcyisabigman
228 天前
用自增的一些缺点:
1 ,暴露业务数据规模,著名的瑞幸咖啡那件事就是被人蹲点捡小票,通过 ID 推算真实业务量
2 ,方便爬虫写脚本抓数据
3 ,存在缓存击穿问题???
chairuosen
228 天前
要看业务是不是数据都公开,京东的商品,论坛的帖子,这种无所谓。资源要做隔离的就需要考虑隐藏了
xuelu520
228 天前
暴露有什么影响吗?
有些 ID 暴露也无所谓啊,就例如这个帖子的 ID 不就在 url 上
涉及到隐私和安全的可以考虑加密或雪花或其他方案加密。
正常用的无所谓的,做好暴露后问题的处理就行。
nekochyan
228 天前
我们有个项目是直接用 ID 异或一个较大的数给前端就行了,然后再异或回来
zt5b79527
228 天前
@dylanqqt #30 单单业务规模这一点,确实对小公司可能不算什么,那大公司呢?如果是年营收上百亿,竞争对手虎视眈眈的上市公司呢?对于大公司来说,安全才是第一位的。竞争对手可能已经通过各种渠道收集了你各种各样的信息,再加上这一点交叉验证,底裤都给你扒出来。
4BVL25L90W260T9U
228 天前
snowflake id 就足够了,别的纯属想太多
yh7gdiaYW
228 天前
看完这贴我就把 v 站的第 1,10,100,1000,10000,100000,1000000 贴看了一遍
对很多业务来说这么轻易的能跳转是不可接受的
lcy630409
228 天前
自增 id 然后商户可以 缴纳 30 元 自定义一个“靓号”
xuanbg
228 天前
不连续就行了
spike0100
228 天前
可以考虑 hashids 对主键进行映射
Pdk5a8759cbeD6CH
228 天前
@zt5b79527 https://ic-item.jd.com/100143612769.html 京东算不算大公司?只能说这并不算什么大不了的事情。
Pdk5a8759cbeD6CH
228 天前
@liuidetmks 危险是因为接口配置失误了危险,并不是自增 id 危险。就像支付宝这次打折 20%一样,并不是开发这个打折 20%的功能很危险,是因为配置错误了很危险。
xiaomushen
228 天前
1. 不是自增就行
2. 但如果是大家喜欢的 MySQL 嘛,那就加盐吧
kakki
228 天前
自增危险是你的接口处理权限有问题,就和"把某个东西藏起来不想让别人找到"在应用密码学里面提到过是一件不靠谱的事情,做好接口防范才是正道.
barbery
228 天前
2 楼正解
zpf124
228 天前
主键暴露不暴露得看你的主键有什么意义。
像 v2 或者贴吧、抖音、b 站的帖子 id 暴露就暴露了,除特殊板块做鉴权拦截外,其它帖子本来就允许你随便看,那数字反倒是一个很容易记忆的东西, 比如 5 、6 年之前 b 站分享很多时候人们还是直接说 av 号的。

像淘宝京东这类 电商,他们肯定不希望可以从订单号看出什么规律,且不说万一有什么权限 bug ,导致瞎拼的 id 可以访问到其它人的数据,但从规律自增让其它竞争对手可以统计他们每日交易量就是个大风险。
Torpedo
228 天前
id 暴露很正常,但是还是不要暴露自增的吧

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

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

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

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

© 2021 V2EX