惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V2EX - 技术
V2EX - 技术
P
Privacy International News Feed
Security Latest
Security Latest
H
Hacker News: Front Page
T
Tenable Blog
The Hacker News
The Hacker News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Security @ Cisco Blogs
Project Zero
Project Zero
O
OpenAI News
AI
AI
Spread Privacy
Spread Privacy
C
CERT Recently Published Vulnerability Notes
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Scott Helme
Scott Helme
Application and Cybersecurity Blog
Application and Cybersecurity Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
CXSECURITY Database RSS Feed - CXSecurity.com
NISL@THU
NISL@THU
A
Arctic Wolf
T
Threat Research - Cisco Blogs
PCI Perspectives
PCI Perspectives
N
News and Events Feed by Topic
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
Simon Willison's Weblog
Simon Willison's Weblog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
Google Online Security Blog
Google Online Security Blog
罗磊的独立博客
L
LINUX DO - 最新话题
U
Unit 42
S
Security Affairs
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
月光博客
月光博客
Engineering at Meta
Engineering at Meta
腾讯CDC
F
Full Disclosure
Cyberwarzone
Cyberwarzone
S
SegmentFault 最新的问题
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
The Cloudflare Blog

Web Dev

没想到 2026 年,还要浪费大量时间在跨域问题上 - V2EX 关于 webview 移动应用开发的一些疑惑,求解答 - V2EX 浏览器访问一个域名不通的情况下,如何让这个域名再次发起 dns 请求 - V2EX 用 socks5 代理无法返回正常网页内容 - V2EX Datastar 未来有机会代替 React 吗? - V2EX nb 了, chrome mobile 文件上传还存在问题啊,不能同时允许多种 accept ,页面会触发刷新 - V2EX 请教下大佬们有无移动端 app 上 h5 页面休眠/内存优化思路 - V2EX 想问问现在大家工作/业务上都用上 http3 了吗? - V2EX 如何截断 http 请求 - V2EX v2 的新回复展示 是如何推送的? - V2EX 有没一种可以将 http/socks 代理转 http 协议的东西? - V2EX 关于 Https 证书验证问题 - V2EX 想找静态网页托管服务,无需域名 - V2EX 如何拼凑不同网页的不同部分到一个网页 - V2EX 特别快速开发网页程序的方法? - V2EX shopify 怎么切换 identity provider - V2EX 还有人在使用 ASP 吗? - V2EX 看到一个项目, H5 页面使用 ip 部署,确定没有 ssl,为啥从微信打开还是能调用摄像头? 求推荐开源的工业领域电商项目 - V2EX 纯编程小白,用 ds 做了个网站碰到阿里云部署问题,寻求耐心指导 - V2EX 请问一下,各位是使用哪些统计平台呢?使用 uniapp 开发的 APP,相对用户进行记录与统计。 - V2EX API 请求体字段定义询问各位大佬。 - V2EX 网络请求 ERR_CONNECTION_ABORTED,问题求助 - V2EX 什么样的网站算设计精良的 - V2EX 前端项目部署到服务器,怎么调通访问服务器上的内网 IP 接口 - V2EX 本地开发用什么域名? - V2EX c++ go rust 谁更适合开发 嵌入式 Linux 上的 web 后台服务 - V2EX 求知 大佬们 一定帮我解答下 感谢 Fastapi 框架中的模板引擎 jinja2 是否已过时,或者说是否还建议使用 - V2EX 推荐一个 web 开发小工具,检测页面是否可以 iframe, 网址 https://iframetester.dev/ - V2EX failed to load response data: no resource with given identifier found - V2EX 请教谷歌浏览器自动填充 - V2EX 各位都在用什么 web 证书方案呢 - V2EX 求助:通过 http 访问某域名失败 - V2EX 服务器端 http 接口调试工具 - V2EX 请教一下搜索和搜索结果页面分离如何参数传递? - V2EX flutter 开发 web 似乎问题也不大 - V2EX 网站中使用原生 dialog 优化用户体验 - V2EX 接口防重放 是不是存粹的脱了裤子放屁? - V2EX VSCode 这种基于 Web 的文本编辑器中的输入光标是怎么实现的? - V2EX 请教: WebSocket + Protobuf 做服务,如何定义路由 - V2EX web 里上传文件 4mb 可以, 5mb 只能等超时是啥问题; - V2EX web 开发实战练习的项目有哪些?不是单独一个页面的,是能完整做出一个完整网站的。 - V2EX 关于 Web 开发困惑,请教从移动开发转到 Web 开发的大佬 - V2EX 请教一下 web app 架构问题 - V2EX 请教各位,作为一名计算机小白设计师,用什么平台搭建自己的个人网站比较好? - V2EX 目前还有没有国内访问比较友好的静态网页托管服务 - V2EX 请问有什么事件可以监听到 GuzzleHttp 的 curl 请求吗? - V2EX 如果别人拿我的微信云环境当图床使用,微信有没有防御措施? - V2EX 腾讯现在还提供 url.cn 这种短链接服务吗? 还有大公司提供吗? - V2EX
应不应该把主键 id 暴露在 url 上? - V2EX
felix9ia · 2025-01-21 · via Web Dev

这是一个创建于 509 天前的主题,其中的信息可能已经有所发展或是发生改变。

  • 主键
  • 暴露
  • URL

    68 条回复    2025-01-23 20:42:41 +08:00

    javalaw2010

    2

    javalaw2010      2025 年 1 月 21 日

    在绝大部分场景下,我推崇方案 1 ,如果有产品端/安全端的特殊需求,我会考虑方案 3 ,只有再极少数场景下,比如日志追踪等,我会考虑 2

    4Et5ShxMIq58n6Lr

    4

    4Et5ShxMIq58n6Lr      2025 年 1 月 21 日

    我(前端)做过的功能,后端给几乎都是用的自增 ID ,极少数场景才会用 2 ,其他目前没遇到

    felix9ia

    5

    felix9ia      2025 年 1 月 21 日

    @javalaw2010 是的,不好意思,我刚刚改了一下。

    其实方案 1 的自增有明显的缺陷,不应该被推荐把? 用 sqids 加盐我觉得也是少数场景,比如用户主页这种。

    CHTuring

    6

    CHTuring      2025 年 1 月 21 日

    2 就够用了,还是像楼上说的,只要不是自增就行了。

    felix9ia

    7

    felix9ia      2025 年 1 月 21 日

    @laobobo 其实,我的这个问题有场景限制,就是在客户端,而不是后台管理页面。

    如果是后台管理,我觉得暴露自增 id 没有关系。

    felix9ia

    8

    felix9ia      2025 年 1 月 21 日

    方案 4 有一个好处就是,定期更换盐,可以让链接失效,当然让链接失效有好处也有坏处

    javalaw2010

    10

    javalaw2010      2025 年 1 月 21 日

    自增 id 除了暴露数据量之外,其他我也没觉得会有啥缺陷,而“暴露数据量”这件事也只有少数场景下才值得被关注,这些场景下就需要具体问题具体分析,比如订单相关场景,其实订单号比 ID 更像事实上的主键(我个人喜欢在绝大多数场景下都保留自增 ID ),业务上基本使用订单号而非主键。

    iyiluo

    11

    iyiluo      2025 年 1 月 21 日

    肯定不能用自增,首先安全那关就过不去,可以被黑产猜测到数据,遇到爬虫,直接把你整个业务的数据都扒下来。用 md5, uuid, 雪花都行

    anonydmer

    12

    anonydmer      2025 年 1 月 21 日

    目前项目都用 ULID

    musi

    13

    musi      2025 年 1 月 21 日

    暴露自增 id 有什么问题吗?
    我没见 v2 有什么安全性问题啊

    justseemore

    14

    justseemore      2025 年 1 月 21 日

    数字没问题啊, 只要不是自增就行 足够大 轮训不全的.

    musi

    16

    musi      2025 年 1 月 21 日

    @felix9ia t 后面的不就是帖子 id 么,你加一减一不也能看到其他帖子么

    kingcanfish

    19

    kingcanfish      2025 年 1 月 21 日

    其实 暴露在 url 上和暴露在接口 json 中没啥区别,不自增就行
    飞书一样暴露出来的

    BeijingBaby

    24

    BeijingBaby      2025 年 1 月 21 日

    安全性上讲,无所谓自增,有人说方便爬取,想多了。你随机 id 要爬取你也能爬到啊,只要数据是公开的,和自增和随机的没任何区别。
    有时候更多的是考虑暴漏业务数据量,以及分布式的时候,才抛弃自增 id 。

    zt5b79527

    25

    zt5b79527      2025 年 1 月 21 日

    @dylanqqt 简单来说,别人能猜到你的数据量。比如说订单号自增,竞争对手就能知道你的订单量。比如之前 b 站的 bv 号,最初好像也是自增的,竞争对手就能知道平台的投稿量,后来就换成随机的了(应该不全是这个原因,但是肯定有这方面的考量)

    esee

    26

    esee      2025 年 1 月 21 日

    主键用的自增 ID, 后端接口查询的时候,sql 语句对 id 加密查询出来,我是这样做的.

    zjsxwc

    28

    zjsxwc      2025 年 1 月 21 日

    自增 id 方便调试和 dba 维护,大部分时候自增 id 就够用了,
    我只在 serverless 系统上看到用 uuid 的

    wangtian2020

    29

    wangtian2020      2025 年 1 月 21 日

    可以暴露,暴露在 url 中与暴露在请求体里有什么区别。
    问题是不要使用自增 id 暴露网站后台的规模!
    订单 id 自增暴露每日订单数量,商品 id 自增暴露订单数量

    chendy

    31

    chendy      2025 年 1 月 21 日   ❤️ 1

    暴露 id 本身没啥问题
    暴露 id + 自增 id 可能导致的问题:
    1. 对外的系统,纯自增 id 可以推算出数据增长量,暴露业务情况
    2. 如果权限做的不好,用户或者爬虫可以通过 id 遍历全部数据
    处理方式也很简单:
    1. 用一些操作对数据进行加密/编码
    2. 完善权限,完善风控

    yelog

    32

    yelog      2025 年 1 月 21 日   ❤️ 2

    @dylanqqt 容易被暴力攻击越权漏洞, 假如微博的私信列表有越权漏洞

    你在进入微博的私信页面, 发现获取私信列表的接口是 weibo.com/p_message/16645, 然后你把最后的数字(id) 改为 1, 发现获取到管理员 admin 的私信列表了哈哈哈, 然后依次加 1, 可以非常快把微博的所有用户的私信列表全部下载下来

    如果不是自增的, 比如 UUID, 尽管知道这个接口越权漏洞, 但是鉴于 UUID 的随机性和位数, 用户隐私泄漏的风险就非常小

    TimePPT

    33

    TimePPT      2025 年 1 月 21 日

    @chendy 完全同意,其实主要问题就是推断业务增长情况,和遍历爬虫(一个冷知识:QQ 邮箱的数字 @qq.com 也有类似问题所以一开始入信反垃圾策略就很严格),其他没啥大问题。

    我新项目一般数据库用 PostgreSQL ,唯一 id 使用 uuidv7 ,传给前端 url 外显时候使用 url safe 的 base64 显示了,除了丑点没啥其他副作用。

    liuidetmks

    35

    liuidetmks      2025 年 1 月 21 日

    @dylanqqt 从 1w 开始,并不能起到很大作用,人家只有作差分就能获取你某段时间内业务规模了
    自增 id 也有其他风险,
    比如某个接口配置失误,通过订单号直接查询数据,还是比较危险的

    importmeta

    36

    importmeta      2025 年 1 月 21 日

    里面逻辑再拿用户 id,加一层保险

    SoyaDokio

    37

    SoyaDokio      2025 年 1 月 21 日

    根据 RESTful 语义原则,当然是把 ID 放在 URL 里更好,但仅限于 UUID 或其他类似主键。
    自增主键的话,建议还是隐藏起来,以免用户可以轻松批量暴库。

    default996

    38

    default996      2025 年 1 月 21 日

    通常建表时我会创建 id,created_at, updated_at
    然后一般情况下我会使用自增 ID;
    特殊情况下,我会使用 id+created_at ,只有两个都匹配到才能查询到记录

    Reficul

    39

    Reficul      2025 年 1 月 21 日

    自增 ID 可能会暴露你们业务一天有多少数据,比如订单量之类的。之前我们懒惰 fix 这个问题的方法是随机跳过部分数字来给数据投毒。

    voy

    40

    voy      2025 年 1 月 21 日

    hackernews is self increased. done.

    forty

    41

    forty      2025 年 1 月 21 日   ❤️ 1

    有时候杀鸡用不上牛刀。

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

    原来 @cxxlxx 已经提出来了,刚开始没注意到。

    thinkershare

    42

    thinkershare      2025 年 1 月 21 日

    自增的也无所谓,需要安全的地方,需要其它权限鉴定逻辑。

    ntedshen

    43

    ntedshen      2025 年 1 月 21 日

    如果你用 innodb 的话,可以把 update 全部改成 insert ignore on duplate update ,你就能得到一个超音速自增的主键(狗头

    Zcyisabigman

    44

    Zcyisabigman      2025 年 1 月 21 日

    用自增的一些缺点:
    1 ,暴露业务数据规模,著名的瑞幸咖啡那件事就是被人蹲点捡小票,通过 ID 推算真实业务量
    2 ,方便爬虫写脚本抓数据
    3 ,存在缓存击穿问题???

    chairuosen

    45

    chairuosen      2025 年 1 月 21 日

    要看业务是不是数据都公开,京东的商品,论坛的帖子,这种无所谓。资源要做隔离的就需要考虑隐藏了

    xuelu520

    46

    xuelu520      2025 年 1 月 21 日

    暴露有什么影响吗?
    有些 ID 暴露也无所谓啊,就例如这个帖子的 ID 不就在 url 上
    涉及到隐私和安全的可以考虑加密或雪花或其他方案加密。
    正常用的无所谓的,做好暴露后问题的处理就行。

    nekochyan

    47

    nekochyan      2025 年 1 月 21 日

    我们有个项目是直接用 ID 异或一个较大的数给前端就行了,然后再异或回来

    zt5b79527

    48

    zt5b79527      2025 年 1 月 21 日

    @dylanqqt #30 单单业务规模这一点,确实对小公司可能不算什么,那大公司呢?如果是年营收上百亿,竞争对手虎视眈眈的上市公司呢?对于大公司来说,安全才是第一位的。竞争对手可能已经通过各种渠道收集了你各种各样的信息,再加上这一点交叉验证,底裤都给你扒出来。

    yh7gdiaYW

    50

    yh7gdiaYW      2025 年 1 月 21 日

    看完这贴我就把 v 站的第 1,10,100,1000,10000,100000,1000000 贴看了一遍
    对很多业务来说这么轻易的能跳转是不可接受的

    chengran630

    51

    chengran630      2025 年 1 月 21 日

    自增 id 然后商户可以 缴纳 30 元 自定义一个“靓号”

    xuanbg

    52

    xuanbg      2025 年 1 月 21 日

    不连续就行了

    spike0100

    53

    spike0100      2025 年 1 月 21 日 via iPhone

    可以考虑 hashids 对主键进行映射

    xiaomushen

    56

    xiaomushen      2025 年 1 月 22 日

    1. 不是自增就行
    2. 但如果是大家喜欢的 MySQL 嘛,那就加盐吧

    kakki

    57

    kakki      2025 年 1 月 22 日

    自增危险是你的接口处理权限有问题,就和"把某个东西藏起来不想让别人找到"在应用密码学里面提到过是一件不靠谱的事情,做好接口防范才是正道.

    barbery

    58

    barbery      2025 年 1 月 22 日

    2 楼正解

    zpf124

    59

    zpf124      2025 年 1 月 22 日

    主键暴露不暴露得看你的主键有什么意义。
    像 v2 或者贴吧、抖音、b 站的帖子 id 暴露就暴露了,除特殊板块做鉴权拦截外,其它帖子本来就允许你随便看,那数字反倒是一个很容易记忆的东西, 比如 5 、6 年之前 b 站分享很多时候人们还是直接说 av 号的。

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

    Torpedo

    60

    Torpedo      2025 年 1 月 22 日

    id 暴露很正常,但是还是不要暴露自增的吧

    iyaozhen

    61

    iyaozhen      2025 年 1 月 22 日

    不要自增就行,不然要是有漏洞会被一下子遍历走

    而且竞争对手能知道你的业务量了

    TonyDutton

    62

    TonyDutton      2025 年 1 月 22 日

    通过 hashids 装饰自增主键再暴露的方案是否有点自欺欺人?采用这样的方案一般就不会再更改盐值了,盐值对内部开发来说都是可获取的硬编码(),那么总有一天盐值会被暴露到外部

    yuezk

    63

    yuezk      2025 年 1 月 22 日

    @dylanqqt #54 京东这个页面是所有人都可以查看的,并不涉及权限验证,用自增问题不大。如果涉及权限验证,你再用自增,就有可能(比如,权限验证有漏洞)被别人猜到 ID ,然后越权访问。但是,如果用 UUID ,即便权限验证有漏洞,也很难被别人利用。这一点,#32 楼已经说的很清楚了

    tabc2tgacd

    65

    tabc2tgacd      2025 年 1 月 22 日

    会暴露业务详情的有规律生成的 id 不应该被暴露。比如用户 ID 用了自增的,那可以猜出你有多少用户之类的。

    Wuuuu

    67

    Wuuuu      2025 年 1 月 22 日

    如果数据库又想自增,展示又怕暴露可以试试 hashids 的库

    liuidetmks

    68

    liuidetmks      2025 年 1 月 23 日

    @dylanqqt 接口配置是错误,自增 id 是放大了这种错误

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