AI 生成的应用与其他应用一样,需要服务端密钥、授权、租户隔离、安全写入、迁移、预算、可观测性和故障恢复。生成了能够运行的 UI 和 API 代码,并不代表这些控制措施已经存在。
最快的检查方式是进行第二位用户测试:创建两个用户、两个租户和两条记录,然后尝试跨越首次用户演示从未触及的每条边界。
能够运行的演示只证明了一条路径
Coding agent 通常会围绕眼前的验收测试进行优化。如果任务是“构建一个笔记应用”,能够新增和列出笔记的表单也许就满足要求。但任务可能从未要求检查一个用户能否请求另一个用户的笔记 ID、超时的插入是否会重复执行,或浏览器 bundle 是否包含管理密钥。
这既是需求定义问题,也是基础设施问题。检查工作需要把缺失的约束转化为可执行测试。
密钥必须止步于服务端
在生成的 JavaScript、source map、移动端 bundle、已提交的环境文件、日志和错误响应中搜索提供商凭据与管理凭据。公开客户端只能获得专门用于公开访问的凭据,或限定到当前用户和操作的短期 token。
OWASP API Security Top 10将对象级授权失效与身份验证失效视为不同风险。身份验证证明调用方是谁,授权则决定调用方能否访问当前对象。
Agent 安全指南介绍了如何将 agent 的构建凭据与部署后应用的身份分开。
每条数据路径都必须执行租户隔离
只给一张表添加 tenant_id 并不够。每次读取、更新、删除、文件查找、缓存键、后台任务、搜索索引、实时频道和数据导出,都必须带有同一条租户边界。
测试直接对象引用:
- 以租户 A 的身份登录并创建一条记录。
- 以租户 B 的身份登录。
- 通过每个公开 API 路径,使用 ID 请求租户 A 的记录。
- 对更新、删除、导出、文件和订阅端点重复测试。
- 在适用场景下,确认服务端对不存在和未授权的记录返回相同且不会泄露信息的结果。
多租户 agent 基础设施指南综合介绍了数据库、配额和共享状态的边界。
写入需要防止重复执行
网络故障会产生结果未知的情况。服务端可能已经提交写入,但客户端没有收到响应。如果 agent 或浏览器在没有幂等键的情况下重试,一次点击就可能产生两笔订单、两条消息、两个部署或两次扣款。
为每项写入定义逻辑操作 ID,保存首次结果,拒绝参数冲突的键复用,并记录保留期限。Agent 重试与检查点中的恢复流程介绍了调用方无法判断首次尝试是否完成时的处理方式。
迁移必须有恢复路径
生成的迁移通常比生成的应用代码更少受到审核,尽管它们可能改变已有的每一行数据。应用迁移前:
- 检查生成的 SQL,而不是只看 ORM 命令;
- 找出锁、整表重写和破坏性语句;
- 在数据形态接近生产环境的副本上运行;
- 测试过渡期间的新旧应用版本;
- 为部分部署定义回滚或向前修复方案。
不要因为迁移由 coding agent 编写,就授予它不受限制的生产 DDL 权限。Supabase 的 MCP 安全指南明确建议使用开发项目、限定项目范围并避开生产数据。所有后端工具都应遵循同样的规则。
成本需要由服务端强制限制
按租户和工作流限制模型调用、付费工具、数据库请求、后台任务、存储和运行时用量。提示 agent 控制成本不能替代强制限制。
计算每项已完成任务的成本时,也应计入失败和重试的运行。AI agent 基础设施成本指南提供了计算方法和预算控制点。
基础设施应让安全路径简单直接
后端默认应返回范围受限的凭据、结构化错误、幂等写入、状态记录和有明确上限的服务访问。一次审核只能发现一次缺失,而平台契约可以避免每个新项目重复遗漏同一控制措施。
Cohesivity 为 coding agent 提供隔离租户,并允许它在服务端访问受支持的后端服务,而无需接触上游提供商凭据。应用仍负责行级授权、审批规则和安全的 schema 设计。
邀请任何人之前先运行第二位用户测试
在一次性环境中使用两个用户和两个租户,依次测试跨租户 ID、重复写入、过期凭据、迁移失败和配额耗尽。记录每次失败的确切请求和服务端结果。
下方的提示词会在修改任何内容前,将这项检查转化为逐文件审计。