前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
返回 AI 情报前线
All News · 全部资讯10043
  • 多 Agent 并行开发,数据库也要隔离
  • 用 Cursor 写 .NET,先约束常见隐患
  • DeepSeek 端点换模后的缓存成本核算
  • GitLab 五类 Agent 接手交付流水线实测
  • 让告警直接支持故障判断与处置
  • AI 生成应用的数据库权限排查
  • vLLM 内核融合让 Kimi K3 推理提速
  • 退款模拟测试暴露智能体越权与消息轰炸
  • DeepSeek 搜索抓取接口公布按次收费
  • 从合并记录推断分支,让编程 Agent 自助选路
  • 用 Spring AI 构建带权限控制的 MCP 服务
  • 给编程 Agent 建代码图谱,减少重复搜索
  • 用 Claude Code 搭建按指令选段的视频工具
  • 用代码关系图定位维护者流失风险
  • 多智能体协作需要一个专门质疑的角色
  • 谷歌开源可在测试时改写执行框架的 Harness2
  • 给 AI 文档加一道可追溯性检查
  • 拆开统计 Agent 的耗时与令牌开销
  • 为本地优先 Agent 定义断网降级契约
  • 审查 AI 代码先查变更是否越界
  • 给模型审查意见加一道补丁定位校验
  • 腾讯为智能体提供独立邮箱与命令行接口
  • 十万向量实测:RAG 数据库如何选
  • Sphinx用上线前问答检查代码理解
  • 用 Agent 审查依赖更新并沉淀决策记录
  • Claude Code 中断任务后如何补全消息历史
  • Agent 重试失控后,如何设置费用边界
  • AI 大图下载如何兼顾鉴权与吞吐
  • AI 图片存储按保留周期拆分原图与临时产物
  • 评测集扩容,竟让健康 Agent 被隔离
  • 动态提示词位置错放,缓存反复重写
  • OpenCode 旧系统被入侵,外部密钥恐泄露
  • 用分区标记和哈希防止 AI 越界改文档
  • Agent 失败排查:先查验收与重试机制
  • 把 TimesFM 时序预测搬进浏览器
  • 接收外部PDF的服务应优先修补lopdf
  • 已加载 36 / 10043
8.0
热点
AI SCORE
编程提效2026-10-18 21:36

AI 生成应用的数据库权限排查

dev.to · AI#Supabase#AI编程#数据安全
Editor brief · 编辑速览

文章区分 Supabase 可放在前端的公开密钥与仅限服务端使用的高权限密钥,强调公开密钥的安全性依赖正确的访问控制。它给出检查公共表 RLS 状态的 SQL,并演示启用行级安全和按数据所有者限制访问。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

如果你用 Lovable、Bolt、v0 或 Cursor,基于 Supabase 开发过应用,大概有过这样的经历:打开 DevTools,在 JavaScript 里看到一串以 eyJ... 开头的长密钥,心里顿时一紧。

先说个好消息:这个密钥本来就应该出现在那里。下面来看看它到底有什么作用,以及用 AI 开发的 Supabase 应用中,真正会导致数据泄露的四类问题。

anon key 在设计上就是公开的

Supabase 会为每个项目提供两类密钥:

anon key 只是用来标识你的项目。它本身不授予任何权限:别人拿到它之后能做什么,完全取决于你的 Row Level Security(RLS,行级安全)策略。

但关键也在这里。只有 RLS 真正发挥作用,anon key 才是安全的。

1. 没有开启 RLS 的表

如果没有开启 RLS,任何人只要从你的 JavaScript 中复制出 anon key,就能通过一次请求读取整张表,而且往往还能写入数据。完全不需要登录。

在 SQL editor 中检查每一张表:

select tablename, rowsecurity
from pg_tables
where schemaname = 'public';

凡是显示 false 的表,都处于开放状态。开启 RLS,并添加一条将数据行与其所有者关联起来的策略:

alter table public.profiles enable row level security;

create policy "Users read their own profile"
on public.profiles for select
using (auth.uid() = user_id);

要留意包含 using (true) 的策略。这类策略虽然开启了 RLS,却允许所有人通过。AI 工具有时会生成这样的策略,以“修复”权限错误。

2. 浏览器中出现 service_role 密钥

service_role(或 sb_secret_)密钥会完全绕过 RLS。如果它出现在前端,无论你的策略写得多好,每张表都会暴露。

AI 工具通常是在无意中把它放到前端的:为了让某个管理功能正常工作,添加了 VITE_SUPABASE_SERVICE_ROLE_KEY 或 NEXT_PUBLIC_... 这样的变量。任何以 VITE_、NEXT_PUBLIC_ 或 REACT_APP_ 为前缀的变量,都会被打包进每位访客下载的 JavaScript 中。

如果你发现了这种情况:立即在 Supabase 的 Settings → API 中轮换密钥,然后将管理操作移到 Edge Function 中,让它从 Supabase secrets 读取密钥。

Storage 有自己独立的策略,与数据表的 RLS 分开配置,因此很容易被遗忘。一个“公开”的 bucket,意味着任何拿到文件 URL 的人都可以下载文件。头像这样处理没问题,但发票、证件照或导出文件就不适合了。

在 Storage 中检查哪些 bucket 是公开的,并像配置数据表一样,为私有 bucket 在 storage.objects 上设置策略。

4. 绕过 RLS 的视图和函数

视图默认以创建者的权限运行,因此,即使底层数据表受到保护,基于它创建的视图仍可能暴露数据。在 Postgres 15+ 中,创建视图时应使用 with (security_invoker = on)。

标记为 SECURITY DEFINER 的函数也会以所有者的权限运行。如果某个这样的函数可以通过 API 调用,就要检查它是否只返回调用者有权查看的数据。

打开你已上线的应用,然后进入 DevTools → Sources,搜索 service_role、sb_secret_、sk- 和 sk_live。正常情况下,一个都不应该搜到。

运行前面的 SQL。每张表都应该显示 true。

检查你的策略中是否存在 using (true)。

检查哪些 Storage bucket 是公开的。

如果你不想手动检查,我开发了 LeakPatrol。这是一个免费的只读检查工具,可以检查泄露的密钥、公开的 .env 文件,以及缺失的安全响应头。在你证明自己拥有该网站后,它还会检查哪些 Supabase 表可以在未登录的情况下读取。每项检查结果都会附带一个 prompt,你可以把它粘贴回 AI 工具中,让 AI 帮你修复。

anon key 从来都不是问题。真正重要的是,你围绕它构建了什么。

如果还需要采取进一步措施,可以考虑屏蔽此人,或者举报其滥用行为。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
让告警直接支持故障判断与处置
下一篇
vLLM 内核融合让 Kimi K3 推理提速