36kr-科技 06月03日 20:34
他用AI三天做了个网站,结果被黑了两次,氛围编码大翻车
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文讲述了一位开发者使用“氛围编码”快速开发聚合网站后遭遇安全漏洞的经历,强调了在追求开发速度的同时,安全配置的重要性。文章详细分析了两次安全漏洞的成因,包括数据库视图权限配置不当和后台注册入口未关闭等问题,并总结了经验教训,提醒开发者在使用低代码或AI工具进行开发时,务必重视安全审查和权限管理,即便项目涉及的是公开数据,也需进行基础的威胁建模,以避免潜在的安全风险。

🔑 **快速开发与安全隐患:** 开发者Harley Kimball使用“氛围编码”在三天内开发并上线了一个聚合网站,但随后两天内接连遭遇两次安全漏洞攻击,暴露了快速开发模式下可能存在的安全隐患。

📧 **邮箱泄露与权限绕过:** 第一个安全漏洞源于数据库视图的默认设置,导致用户邮箱信息泄露,并引发权限绕过。由于视图运行时继承创建者权限,且未启用行级安全(RLS),攻击者得以随意操作数据库。

🚪 **前端关闭≠后端关闭:** 第二个漏洞是由于虽然前端关闭了用户注册入口,但后台Supabase认证服务(Auth)仍处于激活状态,导致攻击者绕过前端,注册账号并创建数据,暴露出“前后端不一致”的安全风险。

⚠️ **安全配置的重要性:** 文章强调,在使用“氛围编码”和现成后端服务时,务必重视安全配置。例如,PostgreSQL的视图和RLS需要仔细配置,Supabase的认证功能也需要彻底关闭,前端隐藏入口远远不够。

今年 2 月,OpenAI 前创始成员 Andrej Karpathy 凭一己之力,带火了一个词——“氛围编码”(Vibe Coding)。

简单说,就是“你说想法,AI 写代码”。就算完全不懂编程,只要有个点子,借助像 Cursor、ChatGPT 这样的 AI 工具,也能快速做出一个应用、小游戏之类的。这种“说着就能写程序”的方式吸引了不少开发者尝试。

不过,看起来轻松高效的背后,也藏着不小的安全隐患。并不是每个人、每个项目都适合靠“氛围”上代码。

这不,一位开发者 Harley Kimball 就在 X 上分享了自己使用“氛围编码”而后“掉坑”的经历。他用了三天不到的时间开发并上线了一个聚合网站的应用,殊不知,却在随后短短两天内接连遭遇两次安全漏洞攻击。

幸运的是,这两次攻击都由白帽黑客(负责任的安全研究员)在没有恶意破坏的前提下发现并反馈。为此,Harley Kimball 将自己的遭遇进行了总结与复盘,希望为更多的初创项目和个人开发者敲响警钟。

三天快速开发的网站

Harley Kimball 做的这个应用,说白了就是一个把各大安全研究员平台(像 HackerOne、Bugcrowd、GitHub 这些)上的公开资料集中到一块的网站。用户注册登录之后,可以一眼看到各路白帽黑客的公开档案。

Kimball 的初衷,是想给整个漏洞赏金圈搞一个“查号宝典”,方便大家快速找到相关研究员的资料。

据 Kimball 自述,这款目录网站的前端是通过 Cursor 和 Lovable 等 AI 编程工具搭建的,并与 Supabase 提供的云数据库服务相连。Supabase 在开发者中颇受欢迎,提供开箱即用的认证、存储和数据库功能。

不过,整个系统中最关键的数据采集部分——也就是把各个平台的公开资料导入数据库的过程——是通过独立的自动化脚本来完成的,并没有集成在前端或用户操作中。这种“前后分离”的设计,虽然能让界面更轻便,也便于快速上线,但也意味着如果底层权限控制没做好,系统可能在开发者都没注意到的地方暴露风险。

起初,Harley Kimball 打算让用户使用 Supabase Auth 自行注册,并提交他们想要汇总的个人资料。但在开发过程中,他意识到,处理用户注册不仅涉及身份验证(Authentication),还涉及权限管理(Authorization)——如果管理不当,可能造成数据被恶意篡改。

因此,他放弃了自助注册功能,转而采用只读的数据视图...令他没想到的是,这也成为了第一个安全漏洞的导火索。

第一次被攻破:邮箱泄露引发的权限绕过

在开发测试阶段,Kimball 采用 Supabase 提供的用户认证功能,这意味着用户必须使用真实邮箱注册登录。

然而,他在检查前后端的数据传输时意外发现:用户邮箱信息会被一并返回给前端页面,存在泄露风险。虽然这些邮箱可能原本是公开的,但一旦用户对平台抱有隐私期待,这种行为就可能构成严重的问题。

为了修复这个漏洞,他采用了一个常见的处理方式:用 PostgreSQL 创建了一个“视图”(view),只提取所需字段,排除了邮箱信息,并让前端只访问这个视图。表面上看,这个做法更安全了——然而,问题也悄然埋下。

正式上线后不久,也就是在第一个版本发布不到 24 小时,一位安全研究员反馈称:尽管网站的前端并没有提供新增或修改数据的入口,他依然能在数据库中随意插入、修改和删除记录。这显然说明,系统的访问权限控制出了问题。

问题的根源,出在那个看似“安全”的数据库视图上。

Kimball 在创建视图时,使用的是默认设置——也就是说,这个视图运行时会继承其创建者(也就是管理员)的权限。而 PostgreSQL 的行级安全(Row-Level Security, RLS)机制,是需要额外配置才能在视图中生效的。如果没有手动启用“SECURITY INVOKER”或加上专门的安全限制,RLS 就会被绕过,导致权限失控。

这正是这次“首个安全漏洞”的核心原因。所幸,一位名为 @Goofygiraffe06 的研究员负责任地报告了这个问题,Kimball 随后紧急修复了访问权限,重新设计了数据的查询方式,堵上了这个漏洞。

第二次被攻破:关闭前端不等于关闭后台

就在首个安全漏洞修复的第二天,Kimball 又收到了另一位安全研究员 @Kr1shna4garwal 的提醒:攻击者依旧可以注册账号并创建数据。他们发现依然可以往数据库中添加新的“研究员档案”——虽然不能修改或删除已有数据,但这意味着系统的访问控制没有完全锁死。

这一次的问题,并不是出在前文提到的数据库视图上,而是另有隐情。

Kimball 虽然在前端界面上取消了“用户自助注册”入口,但后台使用的 Supabase 认证服务(Auth)依旧处于激活启动状态。换句话说,攻击者只要知道 API 的调用方式,就可以绕过前端,通过邮箱和密码注册一个新账号,成为系统“眼中”的合法用户,并按照既有的权限规则操作数据。

这种“前端没入口,但后端没封死”的配置,在不少使用现成后端服务的项目中很常见,也很容易被忽视。

最终,Kimball 通过彻底关闭 Supabase Auth 的注册功能,才完全堵上了这个权限漏洞。

经验教训:氛围编程虽快,安全不能缺位

Kimball 在总结这次“上线即被攻破”的经历时,也分享了几点关键反思,对依赖低代码或 AI 工具进行开发的开发者具有一定参考意义:

首先,“氛围编码”(vibe coding)虽然能让项目快速成型,但默认状态下往往忽略了安全配置,一不小心就会留下严重漏洞。

其次,Supabase 和 PostgreSQL 这对组合功能强大,但它们的权限模型也相对复杂。特别是在使用数据库视图(view)和行级安全策略(Row-Level Security,RLS) 时,如果开发者不了解其背后的默认行为,就很容易配置失误,导致权限失控。

比如,PostgreSQL 中的视图默认是以创建者(通常是管理员)的权限运行的,这意味着 RLS 策略会被绕过,除非显式指定为 SECURITY INVOKER,或另行设置安全策略。

此外,如果项目并未真正使用 Supabase 的认证功能,务必在后台设置中彻底关闭注册入口——仅仅在前端页面隐藏相关功能远远不够。

Kimball 表示,他的应用主要聚合的是公开数据,因此这两次安全事件的实际影响有限。但如果系统涉及的是敏感信息,例如个人身份数据(PII)或健康信息(PHI),类似的配置漏洞可能会造成灾难性后果。

这起事件也提醒开发者,即便是看似简单的工具链和“只读数据”的项目,也必须进行基础的威胁建模与权限审查。快速上线不代表可以省略安全流程,尤其是在 AI 编码与自动化工具愈发普及的当下。

参考:

https://threadreaderapp.com/thread/1929017755136561402.html

https://x.com/infinitelogins/status/1929017766347993129 

本文来自微信公众号“CSDN”,整理:屠敏 ,36氪经授权发布。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

氛围编码 安全漏洞 权限管理 Supabase PostgreSQL
相关文章