爆雷预警:16,326 个 Supabase 数据库正裸露公网,快查你家的表
爆雷预警16,326 个 Supabase 数据库正裸露公网快查你家的表【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase安全研究机构 UpGuard 近期发布调查结论全球有16,326 个 Supabase 数据库正处于可公开读取状态任何人无需登录、无需任何凭据就能通过 REST 接口拉取其中的表数据TechCrunch 等多家媒体跟进报道称其中相当一部分直接暴露了姓名、邮箱、手机号等个人信息。更值得警惕的是这并非 Supabase 平台的漏洞被攻破而是一系列默认权限设计 开发者配置疏忽叠加的结果——这也意味着任何正在使用 Supabase无论托管版还是自托管的团队都可能已经在不知情的情况下裸奔了数月甚至数年。本文结合 Supabase 官方仓库源码还原这 1.6 万个可读数据库是怎么被扫出来的拆解数据裸露的真实威胁并给出可立即执行的三步自检与修复方案。一、1.6 万个可读数据库是怎么被扫出来的先厘清一个关键事实这次事件里没有0day没有数据库被暴力破解。UpGuard 的切入点正是 Supabase 产品形态的两个天生公开的组成部分。第一项目 REST 端点是公网可达的。每个 Supabase 项目都会暴露形如https://project-ref.supabase.co的域名其 Data API 基于 PostgREST 构建——所有表、视图、函数都会自动映射为 REST 资源。UpGuard 的做法本质上是全网扫描这类端点再用公开渠道能拿到的密钥去探测这张表能不能读。第二anon匿名密钥本身就是设计为公开的。官方文档在 API keys 指南 里写得很直白publishable key以及旧版anonkeySafe to expose online它会被打进网页 JS 包、移动 App 安装包里任何人都能逆向提取。密钥本身不设防设防的是它背后的 Postgres 权限体系——而问题恰恰出在这里。仓库中的 Securing your API 文档 记录了一个历史遗留炸弹在已有项目上publicschema 里新建的表会自动获得SELECT、INSERT、UPDATE、DELETE全部权限分别授予anon、authenticated、service_role三个角色。这意味着什么只要开发者新建了一张表却没有手动收紧权限任何持有anonkey 的人也就是每一个访问过网站的人就拥有了这张表的完整读写能力。而更隐蔽的是第二层默认授予的权限并不会因为写了 RLS 策略而自动收回。官方 Row Level Security 文档 用一段危险警告级措辞点明A table in an exposed schema without RLS is readable and writable by any role with a grant on it. Enable RLS on every table in an exposed schema. On projects that still grantanonandauthenticatedby default, revoke those grants. Adding policies doesnt remove them.翻译过来就是在暴露的 schema 中没有启用 RLS 的表对任何持有授权的角色都是可读可写的必须对每张暴露的表启用 RLS若你的项目仍默认给anon/authenticated授权请立即撤销——添加策略并不会移除这些授权。把这两条事实串起来UpGuard 的扫描路径就完全清晰了遍历公网 Supabase 端点 → 用公开的anonkey 对常见表名users、profiles、orders…发起GET /rest/v1/table?select*→ 凡是返回 200 且带数据行、且表未启用 RLS 的项目即被标记为可读取。16,326 个数据库的规模说明这不是个别开发者的疏忽而是默认配置与文化惯性共同作用下的系统性现象。二、暴露表里的数据有多危险要评估危害先看暴露面下到底躺着什么。Supabase 的权限模型里anon角色映射所有未登录请求也就是说任何人指的不是黑客而是任何一个能打开你网站的人。对一张未启用 RLS 的表这个任何人能做什么不止是读。因为默认授权包含完整的四个 DML 权限读取批量select全表个人资料、订单、聊天记录、埋点数据一次性导出拿去撞库、钓鱼或转卖篡改update任意行把商品价格改成 0、把余额改到自己账上、给任何账号植入管理员标记删除delete清空整张表——这是最致命的一次误配置叠加一个扫描器就可能让整个业务的数据库被蒸发。很多团队的直觉是反正表里都是测试数据——但 UpGuard 的调查结果恰恰相反被标记的库中包含大量真实用户个人信息。原因也不难理解绝大多数 Supabase 项目都是从官方 Quickstart 模板起步的模板里的profiles表存的就是用户注册时的真实姓名、头像、联系方式开发者随后往里堆了业务表却很少有人回头检查 RLS 开关。还需要警惕一个次生风险授权是传染的。如果一张内部表通过视图View暴露给 API而视图基于未保护的表创建——官方文档明确指出视图默认绕过 RLSsecurity definer特性它会把手伸向本应被策略隐藏的全部行。也就是说即使主表加了策略一个疏忽的视图也能把整层防线击穿。当然也有必要说清楚责任边界。Supabase 官方在生产清单中反复强调 Shared Responsibility Model共享责任模型平台负责基础设施与默认安全能力安全顾问、警告邮件、网络隔离而每一张表是否对anon开放最终由开发者负责。这 1.6 万个库的悲剧正是平台能力完备、开发者没启用的典型样本。三、三步自检RLS 是否开启、anon key 是否裸奔、公网访问是否收敛好消息是修复路径官方早已给出完整工具链且全部能在仓库中找到源码级佐证。按以下三步走十分钟内就能完成一轮体检。第一步RLS 是否开启——最核心的一步Supabase 的 Security Advisor安全顾问会在 Dashboard 中直接标红未启用 RLS 的表如下图所示想用 SQL 亲自验证可以查询 Postgres 系统目录——RLS 状态记录在pg_class的relrowsecurity字段-- 列出 public schema 中未启用 RLS 的表高危清单 select c.relname as table_name, c.relrowsecurity as rls_enabled from pg_class c join pg_namespace n on n.oid c.relnamespace where n.nspname public and c.relkind r and c.relrowsecurity false order by c.relname;凡是被这条查询命中的表都在裸奔名单上。修复的标准动作官方 RLS 文档 给了完整范式——启用 RLS、撤销多余授权、按需最小授权、逐个操作写策略四件事缺一不可-- 1. 启用 RLS开启后未写策略前所有数据对 API 不可见 alter table public.reports enable row level security; -- 2. 撤销客户端角色的全部授权关键默认授权不会自己消失 revoke all on table public.reports from anon, authenticated; -- 3. 按最小权限原则重新授权登录用户才可管理匿名者什么都不给 grant select, insert, update, delete on table public.reports to authenticated; -- 4. 为每个操作写一条策略select 用 usinginsert/update 用 with check create policy Users can view their own reports. on public.reports for select to authenticated using ( (select auth.uid()) user_id );为了防止下张新表又裸奔仓库还提供了根治方案——用事件触发器在每张新表创建时自动启用 RLS。仓库中的rls_auto_enable()函数监听CREATE TABLE事件自动执行ALTER TABLE ... ENABLE ROW LEVEL SECURITY彻底消灭忘了开的人为因素CREATE OR REPLACE FUNCTION rls_auto_enable() RETURNS EVENT_TRIGGER LANGUAGE plpgsql SECURITY DEFINER SET search_path pg_catalog AS $$ DECLARE cmd record; BEGIN FOR cmd IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag IN (CREATE TABLE, CREATE TABLE AS, SELECT INTO) AND object_type IN (table, partitioned table) LOOP IF cmd.schema_name public THEN EXECUTE format(alter table if exists %s enable row level security, cmd.object_identity); END IF; END LOOP; END; $$; CREATE EVENT TRIGGER ensure_rls ON ddl_command_end WHEN TAG IN (CREATE TABLE, CREATE TABLE AS, SELECT INTO) EXECUTE FUNCTION rls_auto_enable();最后把策略写成可验证的测试——官方推荐的supabase test db流程RLS 文档中的测试范式可以断言anon无授权、authenticated只能操作自己的行让安全不再依赖记忆而是每次部署都自动回归的资产。第二步anon key 是否裸奔——区分可公开与绝密自检要点一句话publishable/anon key 公开不可怕可怕的是它没有 RLS 兜底secret/service_role key 一旦公开就是灭顶之灾。API keys 文档 中的对应关系表写得一清二楚密钥类型能否进前端映射的 Postgres 角色绕过 RLSPublishable key含旧版anon可以设计如此anon/authenticated否Secret key含旧版service_role绝不可以service_role是BYPASSRLSservice_role角色自带BYPASSRLS属性意味着它无视你写的每一条策略。文档用醒目的危险警告强调A leaked secret key exposes all of your projects data。请立刻做两件事全局搜索代码库包括 git 历史是否出现过sb_secret_、service_role或eyJ开头的长 JWT——一个都不允许出现在前端代码、.env提交记录或 CI 日志里检查service_rolekey 是否仍在启用——官方建议项目里没人用就不需要创建任何 secret key用不到就删减少一枚核弹级凭证的存量。第三步公网访问是否收敛——从默认全开改为显式开放即便每张表都上了 RLS从纵深防御的角度暴露面依然应当收敛。仓库 Securing your API 文档 提供了三把闸刀闸刀一撤销默认授权让暴露变成 opt-in。官方正在推动平台默认行为改为新对象默认不可达但在那之前老项目需要手动执行alter default privileges for role postgres in schema public revoke select, insert, update, delete on tables from anon, authenticated, service_role; alter default privileges for role postgres in schema public revoke execute on functions from anon, authenticated, service_role;执行后新建的任何表、函数、序列都必须显式grant才会暴露——这正是最小暴露面的根基。闸刀二启用网络限制Network Restrictions。生产清单going-into-prod明确要求为数据库配置网络白名单只允许公司出口 IP 直连 Postgres把数据库连接这一层从公网剥离。闸刀三不需要就干脆关掉。如果应用只通过 Edge Functions 或后端直连访问数据直接禁用 Data API如果 API 面相对固定把业务表迁移到专用apischema让暴露面一眼可审计。写在最后16,326 这个数字是给整个 Supabase 生态以及所有后端即服务用户敲响的一记警钟托管平台替你解决了数据库运维却替不了你做访问控制决策。好在这一轮暴露几乎全部可逆——RLS 一行alter table就能开启密钥一次轮换就能重置默认权限一套revoke就能收回。现在打开你的 Dashboard跑一遍上面的 SQL看看 Security Advisor 的红点——今晚动手永远不晚。【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

RAGFlow本地RAG框架:开箱即用的文档问答系统

RAGFlow本地RAG框架:开箱即用的文档问答系统

简介:RagFlow-main 是一个面向大模型研发与工程化实践的开源框架代码库,适用于AI算法工程师、深度学习开发者及高校科研人员,聚焦于流图驱动的大规模模型训练与部署优化。资源包含564个文件,以97个Python核心模块、95个TypeScript…

2026/10/20 9:19:57 阅读更多 →
个人AI OS落地指南:LLM Agent与跨平台自动化如何从0到1

个人AI OS落地指南:LLM Agent与跨平台自动化如何从0到1

一个偶然的机会,我参与过“寻找一位能单兵作战的技术 CTO:用 LLM Agent 跨平台自动化重构下一代个人 AI OS”这个项目的早期讨论。之所以说偶然,是因为我们当时没有成建制的技术团队,也没有足够的融资去广撒网招人,更…

2026/10/18 15:22:03 阅读更多 →
iOS卡片堆叠无限滑动实现原理与工程实践

iOS卡片堆叠无限滑动实现原理与工程实践

1. 项目概述:为什么“卡片堆叠无限滑动”成了iOS界面设计的高频刚需 最近在好几个实际项目里,都碰到了同一个需求:用户要像翻扑克牌一样,一张张滑动浏览内容,每张卡片带轻微位移和透明度渐变,滑到最前时自动…

2026/10/19 19:56:08 阅读更多 →

最新新闻

基于深度学习的新闻摘要生成:从Encoder-Decoder到注意力机制的实践

基于深度学习的新闻摘要生成:从Encoder-Decoder到注意力机制的实践

又到了一年一度的毕设季,后台好几个读者问我同一个题目:“基于深度学习的新闻摘要生成算法实现”。这个题选得挺聪明,新闻摘要属于文本生成里最有代表性的任务之一,数据好找、效果直观、还能往上堆注意力机制和预训练模型&#xf…

2026/10/20 11:59:57 阅读更多 →
pvbrowser构建指南:Qt 5.15.2定制编译与WebEngine禁用实践

pvbrowser构建指南:Qt 5.15.2定制编译与WebEngine禁用实践

简介:本资源为开源SCADA组态软件pvbrowser的完整安装与开发包,面向工业自动化初学者、QT开发者及中小型项目实施工程师,解决跨平台监控系统快速搭建、设备协议对接与图形化组态开发等核心需求。压缩包为ZIP格式,大小27.65MB&#…

2026/10/20 11:59:57 阅读更多 →
NeRF工业化落地:从玩具级Demo到生产级应用的工程化实践

NeRF工业化落地:从玩具级Demo到生产级应用的工程化实践

1. 先从“玩具级”说起:NeRF到底卡在了哪里任何一个新技术,从论文走到生产线,中间隔着一条叫“工程化”的河。神经辐射场这两年被提起的频率极高,但很多团队真正试过之后的第一反应往往是“效果确实惊艳,可用不起来”。…

2026/10/20 11:59:57 阅读更多 →
MongoDB到HBase迁移实战:Kettle选型与避坑指南

MongoDB到HBase迁移实战:Kettle选型与避坑指南

一个多月前,我们内部的数据平台需要把线上MongoDB里的用户行为明细同步到HBase。下游要做多维统计和特征加工,MongoDB的灵活文档模型开发期确实舒服,但大范围scan和列式存储场景并不合适;HBase能扛住高吞吐的随机读写与批量扫描&a…

2026/10/20 11:59:57 阅读更多 →
Dify完全指南:从零搭建LLM应用开发平台(涵盖RAG、Agent与部署)

Dify完全指南:从零搭建LLM应用开发平台(涵盖RAG、Agent与部署)

这段时间我一直在折腾各种大模型相关的应用,前后用原生代码搭过客服机器人,也试过纯前端接模型接口做演示 Demo,最后发现一个很尴尬的事实:真正耗时间的不是“调用模型”,而是那些跟业务没半毛钱关系的工程问题。比如多…

2026/10/20 11:59:57 阅读更多 →
Pygame性能优化:把静态障碍画进背景并用Mask碰撞检测

Pygame性能优化:把静态障碍画进背景并用Mask碰撞检测

我先说自己踩过的一个坑:做一个小游戏,十几种障碍物各自做成独立精灵对象,视觉上没问题,但数量一多,每帧要遍历、更新、碰撞检测,开销一下上去了。后来改成把所有障碍直接画到背景面上,再配合 m…

2026/10/20 11:58:56 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →