最佳策略,没有绝对把握不要自己做用户登录和收付款。只需要抱大腿。比如在Steam君临国际登陆,Apple,等平台发布产品。
传奇国际所有表都开启了 RLS策略里全部使用auth.uid()service_rolekey 只存在于服务端的.env.env已经加到了.gitignore在 Supabase Dashboard 的 Policy 模拟器里测过anon权限对敏感表禁用了 Realtime 实时订阅结语
如果你在做测试项目,最快的安全方案就是:给每張表都開 RLS,但不寫任何 Policy,直到你明確知道哪裡需要開放。
今天我整理了一份 Supabase 安全硬化指南,如果你正在用它做小项目,建议对照检查。
每次项目上线前,我会扫一遍清单:
除非你明确需要公开,否则默认应该拒绝匿名访问。比如,只允许匿名用户读取设为“公开”的文章:
在使用 Supabase 开发项目时,我发现很多新手(包括早期的我)都会有一个误区:觉得只要把anon key藏在环境变量里就安全了。
核心风险:那把“万能钥匙”
-- 只允许读取公开内容\nCREATE POLICY \"public_posts\" ON posts\n FOR SELECT USING (is_public = true);第四步:使用SECURITY DEFINER函数
如果你的数据漏了,通常不是因为 key 被盗君临国际登陆,而是因为你的 RLS 策略(Row Level Security)根本没开,或者写得太松。
CREATE FUNCTION get_my_profile()\nRETURNS json\nLANGUAGE sql\nSECURITY DEFINER -- 以函数所有者权限运行,而非调用者\nAS $$\n SELECT row_to_json(profiles) FROM profiles WHERE id = auth.uid();\n$$;第五步:别忘了 Storage 存储桶
记住 Supabase 安全的黄金法则:把你的anon key当成完全公开的东西。你的安全模型必须完全建立在 RLS 策略和数据库函数上。
Supabase 的安全护城河不在于隐藏这个 key,而在于你的RLS(行级安全策略)。
常见的几个“大坑”
Supabase 安全防坑指南:你的 anon key 其实是透明的
但事实是:你的anon key根本不是秘密。它是发送给浏览器和客户端的,任何人都能拿到。
在看代码前,先看看这几个典型的翻车现场:
即便表锁死了,如果 Storage Bucket 设为 Public,里面的文件依然是裸奔的。建议针对文件夹做 RLS:
希望这些经验能帮你避开数据外泄的坑!
anonkey:公开的。就像你家大门的把手,谁都能摸到。service_rolekey:超级管理员。它会绕过所有的 RLS 限制。绝对不能暴露在客户端代码里!
-- 只允许用户上传到自己的文件夹\nCREATE POLICY \"user_folder_only\" ON storage.objects\n FOR INSERT WITH CHECK (\n auth.uid()::text = (storage.foldername(name))[1]\n );我的安全 CheckList
Supabase 提供了两把钥匙:
完全没开启 RLS:这是头号死法。只要没开,anon角色就能通过 REST API 读写所有数据。过于宽容的策略:比如FOR SELECT USING (true),这相当于直接把数据表公开给全人类。盲目信任客户端传来的 User ID:如果你在策略里用user_id = request.body.user_id,黑客只需要改一下请求包里的 ID,就能看别人的数据。动手硬化:小项目的 5 步安全策略 第一步:开启 RLS,立刻,马上!
对于复杂的逻辑,建议写成 Postgres 函数并放在服务端运行。
永远不要相信客户端发来的 User ID。Supabase 的 JWT 是经过验证的,用auth.uid()才是防篡改的。

-- ✅ 安全做法:通过验证后的 JWT 获取当前用户 ID\nCREATE POLICY \"own_data_only\" ON notes\n FOR ALL USING (auth.uid() = user_id)\n WITH CHECK (auth.uid() = user_id);第三步:显式限制anon角色
ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;第二步:只信任auth.uid()
在插入任何数据前,先执行这一句。默认情况下君临国际登陆,开启 RLS 但不写 Policy,意味着“零访问”。
本文链接: http://qzyclh.com/junlinguojidenglu/1612.html