不要忘记修复 Security Checker 的问题在将应用发布到线上之前,请务必先处理 Lovable 内置的 security checker 的所有扫描结果。security checker 会自动扫描你的应用,并提供有助于提升安全性的实用建议。
理解 Lovable 的架构
- Frontend:TypeScript/React 应用
- Backend:Supabase Edge Functions(无服务器函数)
- Database:Supabase(支持实时特性的 PostgreSQL)
前端安全:切勿信任客户端代码
黄金法则:前端代码是公开的
- 永远不要在前端代码中存储机密信息——例如 API 密钥、密码或敏感配置
- 永远不要在前端代码中执行校验——客户端校验可以被绕过
- 永远不要信任前端数据——务必在边缘函数中进行校验
常见的前端安全问题
用于验证和提升前端安全性的提示词示例
后端安全:将业务逻辑迁移到 Edge Functions
将 Edge Functions 视作你的 API 层
- 认证和授权
- 数据验证和清洗
- 业务逻辑和业务流程
- 与外部服务的集成
- 敏感数据处理
Edge Functions 的最佳实践
Edge Functions 应该处理哪些内容
- 在允许用户执行操作之前,始终验证用户确实是其声称的身份
- 检查用户是否对特定操作拥有相应权限
- 绝不要仅因为有人声称已登录就信任其登录状态
- 检查所有传入数据,确保其格式正确
- 从用户输入中移除任何潜在有害内容
- 在处理之前,确保数据符合你的业务规则
- 处理复杂的业务流程,如订单处理、支付金额计算或用户注册
- 管理不同数据之间的关联关系
- 在一次操作中协调多个步骤
- 安全地连接到第三方服务,例如支付处理方、邮件服务商或各类 API
- 安全保存敏感的 API 密钥和凭证
- 合理地处理错误和超时情况
- 处理个人信息、金融数据或其他敏感内容
- 在需要时应用加密或其他安全措施
- 记录重要事件以支持安全审计
使用 Edge Functions 带来的安全优势
安全 Edge Functions 的提示词示例
数据库安全:及早启用 RLS,并保持其规则简单
Lovable 中的行级安全(RLS)
Lovable 应用中的常见 RLS 模式
- 用户只能查看自己的个人资料、设置和个人数据
- 默认模式:“用户只能访问自己的数据”
- 团队成员可以查看其所在团队内的共享项目数据
- 模式:“用户只能访问其所属团队的数据”
- 公开帖子任何人都可以阅读,但只有所有者可以编辑
- 模式:“任何人都可以阅读,但只有所有者可以修改”
- 公司员工可以访问公司数据
- 模式:“用户只能访问其所属组织的数据”
在你的 Lovable 应用中检查 RLS
- 查看哪些数据表已启用 RLS
- 确认敏感数据表已得到保护
- 确保公开数据表具有合适的读取策略
- 验证用户只能看到自己的数据
- 测试共享数据是否对合适的人可访问
- 确认公开数据对所有人都可见
- 对敏感数据未启用 RLS 的数据表
- 过于宽松、会暴露过多数据的策略
- 新数据表或新功能缺少相应策略
RLS 审核提示示例
RLS 快速检查清单
- 所有敏感数据表都已启用 RLS
- 用户只能访问自己的个人数据
- 共享数据配置了合适的访问控制
- 新建表会自动应用 RLS 策略
- 策略简单且易于理解
身份验证安全:将逻辑放在服务端
身份验证逻辑必须在服务器上运行
- 永远不要信任客户端的身份验证检查 - 用户可以修改浏览器中的代码
- 在服务器上验证令牌 - 始终在边缘函数中执行身份验证校验
- 将会话管理保持在服务器端 - 让 Supabase 处理安全的会话存储
- 切勿暴露身份验证相关机密信息 - API 密钥和令牌绝不能暴露给前端
安全认证流程
身份验证最佳实践
- 在处理请求之前,始终在边缘函数中验证用户身份
- 在服务器端而不是在 React 组件中检查用户权限和角色
- 在数据库或认证服务中校验会话令牌
- 使用 Supabase 内置的会话管理来安全存储令牌
- 根据身份验证状态渲染 UI,但绝不要在客户端做安全决策
- 会话过期时重定向到登录页,但务必先在服务器端完成验证
工作区保护:保障内部应用安全
确保内部应用的「visibility」设置为「Workspace」
- 在项目仪表盘中将内部应用的项目可见性设置为「Workspace」
- 确认它们没有发布到互联网
- 为所有内部工具使用适当的身份验证机制
- 定期审计对私有应用程序的访问权限
安全最佳实践概览
开发流程
- 从一开始就重视安全性 - 从第一天起就实现 RLS 和身份验证
- 使用安全检查工具 - 定期运行 Lovable 的安全检查工具
- 遵循安全建议 - 落实所有安全建议
- 充分测试 - 验证安全措施是否按预期生效
- 记录安全相关决策 - 记录安全方面的选择及其理由
定期安全审计
- 检查边缘函数权限
- 审计 RLS 策略
- 检查是否存在机密信息暴露
- 验证身份认证流程
- 测试访问控制
常见安全检查清单
- 前端代码中不包含机密信息
- 所有验证都在边缘函数中完成
- 已实现并测试 RLS 策略
- 使用安全的方法进行身份验证
- 内部应用得到妥善保护
- 已运行安全检查工具并遵循其建议
- 定期开展安全审查
使用 Lovable 安全检查器
- 在你的项目仪表盘中运行安全检查器
- 仔细审查所有建议
- 及时实施建议的修复措施
- 在更改后重新运行检查器
- 记录任何例外情况,并附上清晰的理由