检查清单

氛围编程做的应用,分享前如何做好安全

简短回答

在同事使用你用AI做的应用之前,先检查四件事:没有人能绕过企业登录,只有你们公司的账号能进来,浏览器里运行的代码中没有密钥,数据库不经过应用就读不到。然后检查应用里谁能做什么,以及你离开后它归谁负责。

用AI做的应用发生的泄露,大多不是什么高明的攻击,而是门没关:一个公开链接,一个关掉了访问规则的数据库,一个写在页面里的密钥。这份清单写给做应用的人,也写给负责审查的IT同事。每一项都说明会出什么问题、怎么用简单的方法检查,以及TeamOnly负责哪些、哪些仍然要靠你。

最后更新 由TeamOnly撰写。我们托管用AI做的内部应用,每一项都如实说明我们在哪里能帮上忙、在哪里帮不上。

01为什么重要

用AI做的应用会出什么问题

AI工具很擅长让应用跑起来,却不太在意还有谁能用它。过去两年的三项发现说明了这个规律。

380,000
个可公开访问的资源,由安全公司Red Access于2026年5月在Lovable、Base44、Netlify和Replit上发现。其中约5,000个含有敏感的公司数据,很多已被Google收录。
1,645个中的170个
2025年3月检查的Lovable应用中,有这么多允许任何人不登录就读取或修改其Supabase数据库中的数据,原因是数据库访问规则缺失或配置错误(CVE-2025-48757)。
205,474
个虚构的包名,是2025年的一项研究中16个AI模型在576,000个代码样本里给出的。攻击者可以用这些名字发布包,然后等着有人安装。

这些都不需要什么高明的攻击者,门本来就开着。好消息是:开着的门很容易检查,而且不用读代码就能做到。

核对于2026年10月26日。来源:Security Boulevard on Red Access’s findings(2026年5月)、Matt Palmer, statement on CVE-2025-48757(2025年)、Spracklen et al., “We Have a Package for You!”(USENIX Security 2025)。

02检查清单

分享链接前的11项检查

按顺序来。前几项把外人挡在外面,后几项找出公司内部的疏漏。

  1. 企业登录之前什么都不加载

    会出什么问题
    AI工具常常把登录页做成应用里的一个页面。应用的其余部分和它的API,仍然会响应跳过这个页面或直接调用API的任何人。Red Access发现过一些公司应用,任何人只要打开网址就能获得管理员权限。
    自己检查
    在无痕窗口里打开应用。你应该只看到登录页,别的什么都没有。然后问你的AI工具:“列出所有API路由,告诉我哪些不登录也能用。”答案应该是一个都没有。
    在TeamOnly上
    已处理。发往每个应用的每个请求,都会在你的任何代码运行之前接受检查,包括API调用,没有会话的请求会收到401。没有任何设置可以把应用设为公开。
  2. 只有你们公司的账号能进来

    会出什么问题
    “使用Google登录”默认允许任何Google账号进入,包括个人Gmail。Google的hd设置只是缩小账号选择列表的范围,Google也提醒不要依赖它,因为请求可以被篡改。域名必须在服务器端检查。
    自己检查
    试着用个人Gmail或Outlook账号登录。你应该被拒之门外。问你的AI工具,服务器在哪里检查邮箱域名,检查的是Google签发的令牌,还是浏览器发来的某个值。
    在TeamOnly上
    已处理。同事用工作Google账号、工作Microsoft账号或发到工作邮箱的验证码登录。经过验证的登录令牌里的域名会与你公司的域名核对,个人账号会被拒绝。
  3. 公司内部也只让该看的人看

    会出什么问题
    一个包含薪资、绩效评估或客户数据的应用,因为默认设置而被分享给了全公司。或者AI在代码里自己写了一份白名单,却没有人去更新。
    自己检查
    问一问:公司里每个人都应该看到这些数据吗?如果不是,写下应该能看的人的名字,并确认名单以外的人会被拒之门外。
    在TeamOnly上
    已处理,由你来选。访问范围可以是全公司,也可以是指定名单,在控制台里设置,或者用npx teamonly access only priya@acme.com。每次请求都会检查,所以移除某人会在一分钟内生效。
  4. 不在公开链接上,也不在搜索结果里

    会出什么问题
    有些应用搭建平台默认发布到公开网址,除非你选择私密。公开的应用会被找到:Red Access报告说,许多暴露的公司应用已被Google和其他搜索引擎收录。
    自己检查
    在Google搜索site:加上你应用的网址。在你用来做应用的平台上检查项目的可见性设置。如果显示公开,先改掉它,再做别的。
    在TeamOnly上
    已处理。应用位于登录页之后的yourapp.yourcompany.teamonly.app。每个响应,包括登录页,都会告诉搜索引擎不要收录,登录页上也只显示应用名称和登录方式。
  5. 浏览器里运行的代码中没有密钥

    会出什么问题
    AI工具会把API密钥放在React代码里,或者放在以VITE_或NEXT_PUBLIC_开头的变量里。发送到浏览器的一切,任何打开应用的人都能读到。Supabase说它的secret密钥绝不能出现在浏览器里,因为它会跳过所有数据库规则。
    自己检查
    问你的AI工具:“前端代码、VITE_变量或已提交的.env文件里,有没有任何密钥、令牌或密码?”在浏览器里打开开发者工具,在加载的文件中搜索key、secret和sk_。如果某个密钥曾经暴露过,到签发它的服务那里更换。
    在TeamOnly上
    部分处理。密钥用npx teamonly secrets set NAME保存在代码之外,只有你应用的服务器端代码能读取。TeamOnly添加的说明要求你的AI工具绝不使用VITE_密钥。但没有什么能阻止你自己把密钥粘贴进代码,所以仍然要检查。
  6. 不经过应用就读不到数据库

    会出什么问题
    用Supabase和类似的服务时,浏览器直接和数据库通信,由访问规则(行级安全)决定它能看到什么。这些规则关掉或配置错误时,任何拿到公开密钥的人都能读取或修改整张表。Lovable的那项发现就是这样。
    自己检查
    在Supabase里打开Advisors,然后打开Security Advisor。任何“RLS disabled in public”错误都意味着有一张谁都能读的表。有规则还不够:以普通同事的身份登录,试着打开别人的记录。
    在TeamOnly上
    对外人已处理。每个应用的数据库在互联网上都没有自己的地址,只能在登录之后,通过你应用的服务器端代码访问。每个已登录的人能看到哪些行,仍然要靠你应用的代码来做对(见第8项)。
  7. 每个应用的数据彼此分开

    会出什么问题
    几个应用因为图省事共用一个数据库或一个存储桶。这样一来,一个应用里的一个密钥或一个漏洞,就会把所有应用都暴露出去。
    自己检查
    问一问:有没有别的应用和这个应用共用数据库、存储或密钥?如果有,最薄弱的那个应用决定了所有应用有多安全。
    在TeamOnly上
    已处理。每个应用在首次部署时都会获得自己的数据库、文件存储和密钥,它的会话Cookie也绑定在它自己的网址上。应用之间无法访问彼此的数据。
  8. 谁能做什么,要在服务器端检查

    会出什么问题
    AI对大多数人隐藏了“批准”按钮,却让批准的路由对任何已登录的人开放。或者服务器信任浏览器发来的角色或邮箱。访问控制失效在OWASP Top 10里排第一。未经检查的输入是它的近亲:负数金额,用文本框内容拼出来的SQL查询。
    自己检查
    以普通同事的身份登录,试试只有经理才该做的操作。问你的AI工具:“每个API路由谁可以调用,在服务器端的哪里检查?所有数据库查询都用了占位符吗?”
    在TeamOnly上
    部分处理。你的应用会拿到经过验证的用户(ctx.user)和你在控制台里分配的角色(ctx.user.roles),伪造的身份标头会被移除。说明会要求你的AI工具使用查询占位符,并在服务器端检查输入。在每个路由里检查角色,是你应用的代码要做的事。TeamOnly不会审查它。
  9. 每个依赖包都真实存在且确实需要

    会出什么问题
    AI工具有时会推荐根本不存在的包。攻击者会用这些名字发布包,一旦安装,就会在你的应用里运行陌生人的代码。
    自己检查
    打开package.json。遇到不认识的名字,就去npmjs.com查一下:真实的包有历史记录、关联的源代码仓库和稳定的下载量。部署前运行npm audit,并删掉应用不再使用的包。
    在TeamOnly上
    未处理。TeamOnly不扫描依赖包。一个应用只能访问它自己的数据和密钥,这限制了恶意包能碰到的范围,但在这个应用内部,它仍然可以读取一切。
  10. 谁改了什么,有记录可查

    会出什么问题
    有东西被批准、删除或修改了,却没人说得清是谁做的。除非你要求,用AI做的应用很少会保留修改记录。
    自己检查
    让你的AI工具记录每条记录由谁创建、最后由谁修改以及时间,并为审批和删除保留一张历史表。试一下:修改一条记录,然后看看上面有没有你的名字。
    在TeamOnly上
    部分处理。控制台会显示每个应用的每次部署,包括谁部署的、什么时候部署的,还有实时日志。日志是实时的,不会存储。登录和访问变更的审计日志在Business套餐里,由我们和你一起配置。应用内部的修改记录(谁批准了一笔报销)是你的应用要做的事。
  11. 有负责人、有备份,也有人员离职的预案

    会出什么问题
    搭建者离职了,应用还挂在他的个人账号上运行,或者在他的银行卡被注销后停掉。又或者一次错误的修改清空了一张表,却没有任何副本。
    自己检查
    写下谁是应用的负责人,谁来接手。把代码放在公司的Git仓库里。让你的AI工具为主要的表加上CSV导出,并试一下。
    在TeamOnly上
    部分处理。应用属于你的公司,管理员可以把应用交给新的负责人。停用某人的工作账号后,他就不能再登录。已经登录的人会一直保持登录,直到会话结束,时长由管理员决定,从8小时到30天不等。控制台目前没有备份或导出按钮,所以请把导出功能做进应用里。

03打印出来

一分钟检查

十一个是非题。任何一个“否”,就是下一件要修的事。

分享这个应用之前

  1. 无痕窗口里只显示企业登录页,别的什么都没有。
  2. 个人Gmail或Outlook账号会被拒之门外。
  3. 只有需要这些数据的人能打开它。
  4. 用site:搜索应用的网址,什么都搜不到。
  5. 浏览器代码和代码仓库里都没有密钥、令牌或密码。
  6. 不经过应用就访问不到数据库。
  7. 这个应用的数据和密钥没有和其他应用共用。
  8. 普通同事做不了只有经理才该做的事。
  9. package.json里的每个包都真实存在,并且仍在使用。
  10. 记录上能看到是谁创建和修改的。
  11. 如果我离开,有人知道这个应用归他负责,数据也可以导出。

想要纯文本版?本页的Markdown版本里有现成的清单可以粘贴(英文)。

04面向IT

审查同事做的应用

和搭建者一起花十五分钟,共享屏幕。你检查的是配置,而不是逐行读代码。

  1. 放在哪里,谁能访问

    拿到网址。用一台没有登录的设备打开,再用个人账号打开。问清楚它托管在哪个平台、用谁的账号付费。如果是个人账号,这是第一件要改的事。

  2. 里面有什么数据

    问清楚输入了什么、数据从哪里来。客户个人数据、支付数据、健康数据或其他系统的密码会提高要求,可能意味着这个应用应该只开放给指定名单。

  3. 密钥放在哪里

    列出应用调用的每个外部服务。每个密钥都应该放在托管平台的密钥设置里,权限只限于应用需要的范围,并且不与其他应用共用。凡是曾经出现在代码或聊天里的密钥,都要更换。

  4. 谁能做什么

    让搭建者以普通用户身份登录,或者请一位同事来登录,试试管理员操作。请搭建者让他的AI工具列出每个API路由,以及在哪里检查角色。这里的漏洞要在应用的代码里修复。

  5. 依赖包和代码

    一起看package.json,并运行npm audit。要求代码放在公司的Git仓库里,而不只是在搭建者的笔记本电脑上。

  6. 负责人,以及他离职的那一天

    把应用、负责人、备用负责人、数据和用户写进你的应用清单。约定好负责人离职时怎么办。影子AI应用指南里有一页可以直接复制的制度。

05常见问题

大家常问的问题

查看全部问答

氛围编程做的应用可以放心分享给同事吗?

可以做到。常见的问题出在应用放在哪里、怎么配置:公开链接、没有真正的登录、密钥放在浏览器里、数据库规则被关掉。每一项都能在几分钟内检查完。发链接之前,先按本页的清单过一遍。

氛围编程应用最大的安全风险是什么?

不登录就能访问到的数据。通常有两种情况:应用放在公开链接上,前面没有登录;或者数据库直接响应请求,而它的访问规则是关着的(Supabase里的行级安全(RLS))。两者都是配置问题,而不是AI写了糟糕的代码。

把Supabase的anon密钥放在浏览器里安全吗?

anon或publishable密钥本来就是给浏览器用的,但前提是行级安全限制了它能访问的范围。如果某张表关掉了行级安全,任何拿到这个密钥的人都能读取和修改它。secret或service_role密钥绝不能出现在浏览器里:它会跳过所有规则。

“使用Google登录”能把应用限制在我们公司内部吗?

单靠它不行。默认情况下任何Google账号都能登录,包括个人Gmail。Google的hd设置只是缩小账号选择列表的范围,Google也说不要依赖它。应用的服务器必须在每次请求时,检查经过验证的登录令牌里的域名。

怎么检查我的应用有没有被Google收录?

在Google搜索site:加上你应用的网址,比如site:myapp.lovable.app。如果出现了页面,说明应用是公开的,并且已被收录。把应用设为私密,或者移到企业登录之后;如果域名是你的,再用Search Console里的“移除”工具请Google删除这些页面。

要不要让AI工具写安全的代码?

要,而且给它固定的说明比偶尔叮嘱一次更好。项目里的规则文件(CLAUDE.md、AGENTS.md或Cursor规则)会告诉工具密钥放在哪里、怎么写数据库查询、在哪里检查角色。npx teamonly init会为TeamOnly应用添加这些说明。之后仍然要自己检查:说明能减少错误,但不能消除错误。

TeamOnly会扫描我应用代码里的安全问题吗?

不会。TeamOnly会在每个应用前面加上企业登录,把每个应用的数据和密钥分开,并让应用不出现在搜索引擎里。它不会审查你的代码、扫描你的依赖包,也不会检查应用内部的规则。清单上的这些项目仍然由你负责。

批准一个用AI做的应用之前,IT应该检查什么?

它托管在哪里、谁能访问、登录是怎么限制的、密钥放在哪里、里面有什么数据、谁是负责人,以及这个人离职后怎么办。本页的“面向IT”部分是一份简短的审查,你和搭建者花15分钟就能完成。

抢先体验

让平台替你关上那些开着的门。

一条命令部署,应用就在你的企业登录之后,不进搜索引擎,自带数据库和密钥。免费试用14天,无需绑卡。

免费试用14天或者现在就订阅

试用无需绑卡。之后每月$19起,随时可取消。

还没准备好?先获取动态

请使用工作邮箱。我们很少发邮件,只在有值得一说的消息时才发。

有问题请发邮件到hello@teamonly.dev,会有真人回复。