跳到正文

用 Lovable 开发的应用上线前:一份安全检查清单

在真实用户和数据到来之前要做的十五项检查:数据库规则、密钥、存储、登录、支付、函数和备份。大多数只需几分钟。

阅读约 4 分钟

Lovable 让应用从想法变成可用产品的速度,超过了以往任何工具。它在安全方面也有帮助:每次发布前会扫描常见的数据库问题,还提供由 AI 进行的更深入的代码审查。两者都要用。它们能发现很多问题,但 Lovable 自己也表示,无法保证应用是安全的。

缺口在于扫描器无从得知的部分:你的应用中哪些数据是私密的,谁应该被允许做什么,以及当有人以你没想到的方式使用应用时会发生什么。这份清单针对的正是这部分。上线前过一遍,每次大改动之后再过一遍。

数据库

1. 每张表都开启了 Row Level Security。 通过 SQL 创建的表(AI 工具就是这样建表的)默认不会开启。10 分钟 Supabase 自查介绍了如何把它们列出来。

2. 私密表上没有放行一切的规则。 如果 profiles、orders 或 messages 上有 using (true) 规则,那么不管有没有 RLS,任何人都能读取它们。

3. 用户不能给自己提权。 如果 profiles 表里有 role、is_admin 或 plan 这样的列,而用户可以更新自己的那一行,他们就能在浏览器里用一个请求改掉这一列。请把角色和付费状态存放在只有服务器代码能写入的单独表中,或者限制更新规则允许修改的列。

查找用户可更新表中与权限相关的列
select table_name, column_name
from information_schema.columns
where table_schema = 'public'
  and column_name ~* '(role|admin|plan|credits|verified|status)';

把结果与 RLS 自查中看到的 update 规则进行对照。

密钥

4. 前端没有 secret 密钥。 在已上线的应用中搜索 sb_secret_ 和 service_role。如果找到了,请按照密钥泄露后第一个小时的处理方案操作。

5. 前端也没有第三方服务的机密。 AI、支付和邮件的密钥都应放在服务器函数中。搜索 sk-、sk_live、re_,并检查所有以 VITE_ 开头的环境变量。参见如何把它们移到服务器函数中。

存储

6. 个人文件放在私有存储桶中。 头像可以公开;身份证件、发票和合同不行。每个用户只能访问自己的文件夹。参见 Storage 检查。

7. 存储桶设置了大小和类型限制。 否则任何有上传权限的人都能存放任何东西,费用由你承担。

登录

8. 开启了邮箱确认,除非你有理由关闭它。没有邮箱确认,别人就能用他人的邮箱地址注册。

9. 重定向 URL 仅限于你自己的域名。 在 Supabase 的 Authentication → URL Configuration 中,把 Site URL 设为生产域名,只列出你实际使用的地址。删除不再需要的 localhost 和预览地址。

10. 如果应用仅限受邀用户,就关闭注册。 开放注册的内部工具,就是一个公开应用。

11. 每个管理页面都在服务器端检查角色。 隐藏按钮并不是访问控制。如果某个页面或操作仅供管理员使用,其背后的数据就必须由检查角色的规则或服务器函数保护,这样直接调用 API 也拿不到任何东西。

支付和函数

12. 价格由服务器决定。 浏览器只说明要买什么,由服务器查询价格。一个接受浏览器传来金额的函数,迟早会收到 0.01。

13. 支付 webhook 经过签名验证。 信任任何请求的 webhook 端点,会让任何人都能把订单标记为已付款。

14. Edge Functions 会检查调用者。 每个读取数据、花钱或发送邮件的函数,都应该验证用户身份并校验输入。只要有一个开放的函数,数据库里的所有规则就都形同虚设。

恢复

15. 你知道如何恢复昨天的数据。 在 Supabase 中打开 Database → Backups,看看你的套餐包含什么;较低的套餐可能很少,甚至没有。AI 的一次错误修改或一次失败的迁移,就可能删掉一张表。如果数据很重要,就要准备好真正恢复过一次(恢复到测试项目中)的备份。

上线之后

安全不是一劳永逸的。每一个新的提示词,都可能带来一张没有规则的表、一个放错位置的密钥,或一个信任浏览器的函数。两个习惯会有帮助:

  • 不只在上线时,每次重大修改后都运行 Lovable 的扫描和 Supabase 的 Security Advisor。
  • 让 AI 用通俗的语言解释它刚刚创建的 RLS 规则和函数。如果解释和你的预期不一致,就该仔细检查了。

如果你希望上线前有人帮你再看一遍,我们免费的 Security Check 会以只读方式从外部检查这些要点,并在 48 小时内把最严重的问题以书面形式发给你。如果需要修复,Security Fix 会以开工前报出的固定价格完成。

LovableSupabaseRow Level Security身份验证AI 开发的应用

本文还有以下语言版本: EnglishPortuguêsEspañol日本語

全部文章