网易首页 > 网易号 > 正文 申请入驻

多租户上线后,我在自己代码里挖出七项越权发现

0
分享至

上一篇文章里我写过一句话,当时觉得挺得意,其实还没资格说出口:隔离要么是结构性的,要么就是幻觉。那会儿我把单租户定为第一个版本的诚实边界,多租户的事往后放。

v0.2.0 在 HivePlane 上把多租户发了出去。然后我拿一套对抗性测试去打自己划的这条边界,那句话就不再是一个论点,变成了一张 bug 清单。


下面这张表里有七项发现,如果把表里合并的两项拆开算,是九项。每一项都是同一个毛病:系统在推断租户身份,而不是断言它。

把这句话拿去测一遍

把那张表当成论据来读。靠一个请求头、一个模型默认值、一个声明字段来执行的租户隔离,都是幻觉。它必须在存储层的主键和已认证的主体上执行,绝不能依赖客户端提供的值。

先说我逢人就讲的那个。一个 worker 注册在租户 A 名下。租户 B 的代码提交了一次运行,用 worker id 去寻址它——worker_id: "worker-7"。因为主键只有 worker_id,不是 (worker_id, tenant_id),这次查找成功了。租户 B 差一点就在租户 A 的 worker 上执行了一次运行。

没有任何策略说不。存储层说了可以。存储层才是真相。

修法属于那种事后看很明显、当时做起来很丢人的改动:每一个持久化键都变成复合键。(worker_id, tenant_id)、(workload_id, tenant_id)、(tool_id, tenant_id)。一次读取如果不在当前操作的租户范围内,结果看起来就像这条记录不存在——因为在那个租户的世界里,它确实不存在。

如果你的隔离依赖应用记得加上一句 WHERE tenant_id = ?,那你拥有的是一次推断,不是一条边界。把主键做成复合的,就算查询忘了带条件,存储层也没法返回别的租户的行。

那个可以伪造的请求头

限流器当时拿 X-Hiveplane-Tenant 这个请求头当键。认证关掉的时候(本地默认就是这样),这个头是被信任的管道。认证打开之后,一个知道别的租户 id 的调用方,只要设上这个头,就能借用那个租户的限流预算。

一个请求变成 TenantContext 的唯一入口是 get_tenant_context。认证打开时,已认证主体的租户必须和请求头一致;只有系统主体才能选择任意租户。就是这一条断言,把请求头从身份降格成了提示。在它之前的一切,都是推断。

默认租户是一个你忘了命名的安全边界

一半的发现其实是同一个 bug 长在不同子系统里:一条没有显式租户的记录,默认落到 default。审批、安全事件、事故状态、缓存写入——它们都有租户字段,没人设置的时候,模型就填上 default。

于是租户 A 的一次运行里产生的安全事件,本该落进租户 A 的审计里,除非某处忘了把上下文传下去——那它就落进了 default,而租户 B 的操作员在那里能看到它。

教训是:默认租户不是一个安全的默认值。它是一个静默的跨租户泄漏,等着某一条忘了传上下文的代码路径。修法是让没有归属的事件不落默认值——它进死信队列并告警。那个未归属计数器必须是零。

我学到了什么

推断不等于执行。应用自己加的一句 WHERE、应用选择信任的一个请求头、模型自动填上的一个默认值——每一个都是猜测。我那九个 bug,每一个都是在压力下猜错的猜测。

修法在每处都一样:复合主键、跨租户写入时抛 TenantScopeError、读取结果表现为“未找到”,以及一场对抗性的实地测试,去攻击每一条边界,而不是只测顺利路径。这张 bug 清单本身就是论据,证明那句话是对的。

v0.2.0 的实地测试端到端演示了 34 道发布门禁,包括按租户隔离的预算、策略和密钥,以及一个不能审批的查看者。完整证据在实地测试报告里;迁移指南记录了这次破坏性的 schema 变更(只向前的迁移 0003,先备份)。

参考

- HivePlane —— pip install hiveplane==0.2.0
- 实地测试报告(36/36)
- 迁移指南(v0.1.0 → v0.2.0)
- 多租户隔离方案
- 密钥、RBAC 与访问审计设计

你的平台在哪里推断租户身份,而不是执行它?说出一个客户端提供的字段变成身份的地方。那就是你的下一个 bug。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
安世半导体被荷兰强行接管一年后,将晶圆供应和封测全都搬到印度,闻泰科技超300亿的收购资金“打水漂”了吗?

安世半导体被荷兰强行接管一年后,将晶圆供应和封测全都搬到印度,闻泰科技超300亿的收购资金“打水漂”了吗?

逍遥漠
2026-10-03 12:45:25
我们都被课本骗了几十年:白求恩根本不是普通好人,当拨开课本简略的文字才发现,这段传奇不能只用善良概括

我们都被课本骗了几十年:白求恩根本不是普通好人,当拨开课本简略的文字才发现,这段传奇不能只用善良概括

回京历史梦
2026-10-02 08:35:16
我娶了俄罗斯退役女兵,一个月50次夫妻生活,她却从不提家里人,岳父病危时我塞给她24万,直到10年后我去银行贷款,柜员一句话让我当场愣住

我娶了俄罗斯退役女兵,一个月50次夫妻生活,她却从不提家里人,岳父病危时我塞给她24万,直到10年后我去银行贷款,柜员一句话让我当场愣住

故事情感屋
2026-10-03 15:54:33
女选手晒马拉松个人最好成绩,称“前15km跑得很舒服”,结果被拍到坐自行车比赛!当事人凌晨道歉

女选手晒马拉松个人最好成绩,称“前15km跑得很舒服”,结果被拍到坐自行车比赛!当事人凌晨道歉

南方都市报
2026-10-03 15:32:29
空姐下跪再升级!东航已报警,男子迎3大噩耗,或将上升刑事审判

空姐下跪再升级!东航已报警,男子迎3大噩耗,或将上升刑事审判

小鋭有话说
2026-10-03 22:30:13
尴尬了!某汽车厂商2000元邀头部车评人做视频,博主反问怎么养活300人,网友:嫌弃少可以婉拒,挂网上讽刺别人,寒碜的是自己

尴尬了!某汽车厂商2000元邀头部车评人做视频,博主反问怎么养活300人,网友:嫌弃少可以婉拒,挂网上讽刺别人,寒碜的是自己

火山詩话
2026-10-02 08:30:52
4岁男孩被拐8年,在商场门口听到口琴声突然愣住:曲子是我妈吹的

4岁男孩被拐8年,在商场门口听到口琴声突然愣住:曲子是我妈吹的

温情邮局
2025-09-12 10:18:12
林昀儒把事闹大了!正式申诉状告林诗栋,张本智和也吃过这个亏

林昀儒把事闹大了!正式申诉状告林诗栋,张本智和也吃过这个亏

青橘罐头
2026-10-03 21:57:31
中国游客国庆全球大暴走!日本却跌出热门前10,日网友这样说……

中国游客国庆全球大暴走!日本却跌出热门前10,日网友这样说……

日本物语
2026-10-02 20:50:18
刚拿到绿卡!30多岁中国夫妇澳洲车祸身亡

刚拿到绿卡!30多岁中国夫妇澳洲车祸身亡

看看新闻Knews
2026-10-04 00:23:54
康奈尔兄弟会性侵案细节曝光,州长换掉检察官:自愿醉酒非“性侵许可证”

康奈尔兄弟会性侵案细节曝光,州长换掉检察官:自愿醉酒非“性侵许可证”

澎湃新闻
2026-10-03 19:08:27
四川巴中一新娘在婚礼前一天,开窗准备收袜子时不幸被马蜂蜇伤嘴唇,唇部明显肿胀,自嘲仿佛“蛤蟆精”

四川巴中一新娘在婚礼前一天,开窗准备收袜子时不幸被马蜂蜇伤嘴唇,唇部明显肿胀,自嘲仿佛“蛤蟆精”

潇湘晨报
2026-10-03 14:52:08
送蛋横扫晋级!兹维列夫2-0轻取商竣程,中网八强将战德约

送蛋横扫晋级!兹维列夫2-0轻取商竣程,中网八强将战德约

全景体育V
2026-10-03 20:14:49
收官再添金!中国队结束亚运征程

收官再添金!中国队结束亚运征程

五星体育
2026-10-03 20:01:49
从碾压安踏李宁,到月亏过亿:曾经的运动品牌顶流,到底错在哪?

从碾压安踏李宁,到月亏过亿:曾经的运动品牌顶流,到底错在哪?

三农老历
2026-10-03 11:12:46
波兰外长在联大捅破天!拿中国1971年说事,背后算计太阴险了!

波兰外长在联大捅破天!拿中国1971年说事,背后算计太阴险了!

近史博览
2026-10-03 14:46:56
28岁香港名媛碎尸案细节曝光:前公公曾任警长,一家人因房产合谋杀人,在不同地方先后购入锤子、砧板等作案工具

28岁香港名媛碎尸案细节曝光:前公公曾任警长,一家人因房产合谋杀人,在不同地方先后购入锤子、砧板等作案工具

封面新闻
2026-10-03 21:30:05
33岁上海老师泰国失联,错失2次活命机会,使馆介入 幕后套路惊心

33岁上海老师泰国失联,错失2次活命机会,使馆介入 幕后套路惊心

潋滟晴方DAY
2026-10-03 15:38:07
老年暴走团互扇耳光,没有赢家,只有不堪

老年暴走团互扇耳光,没有赢家,只有不堪

关尔东
2026-10-02 23:09:18
7-0!贝林厄姆助攻帽子戏法,凯恩2射1传,巴萨飞翼连场破门,英格兰狂胜

7-0!贝林厄姆助攻帽子戏法,凯恩2射1传,巴萨飞翼连场破门,英格兰狂胜

我的护球最独特
2026-10-04 01:52:47
2026-10-04 06:12:49
报错免疫体
报错免疫体
一名在需求评审和数据异常中反复横跳的产品运营。
138文章数 71关注度
往期回顾 全部

科技要闻

英伟达盘中创历史新高,市值逼近6万亿美元

头条要闻

刚刚拿到绿卡 中国籍夫妻突发车祸身亡

头条要闻

刚刚拿到绿卡 中国籍夫妻突发车祸身亡

体育要闻

这个讨论了一夏天的问题,马刺有答案了吗

娱乐要闻

马思纯一家爬山祈福!素颜出镜笑容甜

财经要闻

4亿台电视挂墙落灰 为何没人愿意开了?

汽车要闻

方程豹9月热销破4万 首款皮卡鲨鱼将于四季度上市

态度原创

健康
教育
游戏
本地
艺术

刷酸祛痘,为什么有人翻车?

教育要闻

广东一市试点取消中考分流,能减轻升学压力吗?

《巫师3》新MOD!狮鹫变鸽鸽 还会咕咕叫

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

艺术要闻

何家英作品欣赏

无障碍浏览 进入关怀版