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

235 天前
 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/

9202 次点击
所在节点    Web Dev
68 条回复
iyaozhen
234 天前
不要自增就行,不然要是有漏洞会被一下子遍历走

而且竞争对手能知道你的业务量了
TonyDutton
234 天前
通过 hashids 装饰自增主键再暴露的方案是否有点自欺欺人?采用这样的方案一般就不会再更改盐值了,盐值对内部开发来说都是可获取的硬编码(),那么总有一天盐值会被暴露到外部
yuezk
234 天前
@dylanqqt #54 京东这个页面是所有人都可以查看的,并不涉及权限验证,用自增问题不大。如果涉及权限验证,你再用自增,就有可能(比如,权限验证有漏洞)被别人猜到 ID ,然后越权访问。但是,如果用 UUID ,即便权限验证有漏洞,也很难被别人利用。这一点,#32 楼已经说的很清楚了
lyxxxh2
234 天前
这只能说看需求...
反正我全是自增,且暴露。
接口都是要登录,不是你的数据你也看不了。

之前加密我用的:
https://github.com/vinkla/laravel-hashids
tabc2tgacd
234 天前
会暴露业务详情的有规律生成的 id 不应该被暴露。比如用户 ID 用了自增的,那可以猜出你有多少用户之类的。
fengjianche
234 天前
用 唯一索引字段值
Wuuuu
234 天前
如果数据库又想自增,展示又怕暴露可以试试 hashids 的库
liuidetmks
233 天前
@dylanqqt 接口配置是错误,自增 id 是放大了这种错误

系统内部状态一般尽量少向外暴露避免被利用,典型的例子就是长度扩展攻击伪造签名

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

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

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

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

© 2021 V2EX