前段时间,一位白帽子在对我们的系统做渗透测试时,不小心把单点登录系统里所有业务系统的注册数据全部删除了,导致我们所有业务系统都登录不了了。
开始是我自己排查的,我发现线上有一个 JS 加载报错了,以为是 JS 报错导致后续逻辑没有执行(因为后端服务没有任何报错)。我看这个 JS 是引用的三方 CDN 的资源,而且是一个统计类的 JS,所以就直接把它删了。
结果还是不行。
最后,还是借助 AI 解决的。在让 AI 分析问题的时候,它通过我们的日志服务发现当天早上有一个异常的请求,这个请求会删除线上系统的注册数据。
然后,AI 根据代码逻辑又给我生成了一个修复数据的 SQL,执行完,果然就恢复了。
现在我们在用 AI 快速完成需求、修复 bug,别人也可以用 AI 更快地发现系统的漏洞。这次遇到的是白帽子,如果换成不怀好意的人,后果可能就严重得多了。
之前看到美国因为安全问题,限制部分新模型开放的消息时,我还觉得是不是有点太敏感了。经历这段时间白帽子提出来的各种问题,真的有点理解这种担心了。
我们有些问题藏得很深,相关系统在线上跑了将近十年,我们此前一直没有发现。这段时间,白帽子在 AI 的帮助下,把它们一个个都找了出来。
所以,也把最近处理漏洞的一些发现整理出来,跟大家分享一下。
这次白帽子发现的问题,最多的线索来自 JS 文件,比较重要的有三类:写死的 token、系统里的接口 URL,以及签名和加密逻辑。
以前这些 JS 经过压缩,有的还做了混淆,人去读、去梳理,比较费时间。现在借助 AI,理解代码、整理调用关系就容易多了。
其中一件事让我挺懵的:白帽子提出来的一些接口,明明是登录后才有权限进入的页面会调用的。他怎么知道这些地址?难道已经攻破我们的登录了?
仔细想了想,才想到这些地址是从前端 JS 里分析出来的。因为我们一些比较老的系统一直也没做过什么优化,所以很多应用的 JS 都打在一起了,页面虽然进不去,相关代码却已经直接下发到浏览器了。
写死在前端的敏感 token 就更直接了,发到浏览器里,就不能再当成秘密。签名和加密逻辑被看到,本身不一定是漏洞,但如果连密钥都放在前端,就很危险了。
另外,针对这样的后台应用的 JS 可以做一个小优化:拆分打包、按需加载,避免一开始就把全部业务代码发出去。但这也只能减少一次性暴露的信息,接口本身仍然要做好权限校验。
另一类比较多的问题,来自我们使用的开源项目。如果 AI 通过 JS 文件、接口特征识别出了项目,就可以结合公开源码,更有针对性地查找问题。
开头说的单点登录系统,问题就出在一个开源项目上。当时用的时候,我就感觉这个项目很复杂,用了好几年也没搞懂其中的一些逻辑。各种问题断断续续,一直想换,又考虑到成本一直没动。
结果出问题那天,我让 AI 帮我分析了一下,发现它的漏洞多得简直夸张。所以当天,我就让 AI 协助把整个框架全下掉了。
开源项目当然还可以用,但选型时不能只看功能能不能跑,后续的维护和安全更新也得跟上。
这次被发现的不少漏洞,来自 PHP 项目,问题多得真的有点让人发麻。大部分集中在我们使用的一个开源 PHP 框架上,另外一些来自我们以前写的各种花式操作的代码。
PHP 是我的后端启蒙语言。以前大家选择它,很重要的原因就是开源项目多、语法灵活、开发效率高,很多需求拿一个现成项目改一改,就能做出来。
但语法灵活也需要约束,老框架和历史代码的问题更不能一直拖着,这次的经历让我对这些项目的安全性有了担忧。
另外,现在有 AI 帮忙写代码,PHP 容易上手、现成代码多带来的效率优势,正在被 AI 拉平。
所以我现在自己做项目,基本会选 Go:语言比较简单,部署比较省事,资源开销也比较符合我的需要。不过想到自己当初是从 PHP 入门的,还是会有点担心它以后的发展。
我让 GPT、Claude 分析某个漏洞是否真实存在,有时会收到安全原因的拒绝。即使强调是在修自己的系统,源码也就在这里,还是会被拒绝。
GLM 目前在这方面的限制更宽松一些,所以不少问题最后是借助它来定位和解决的。
我们这次也没有完全按“提一个、修一个”的方式处理。公司创业初期留下来的一些 PHP 项目,现在还承担着重要的业务功能,要彻底解决其中一些问题,基本就需要整体重构。
但业务还在跑,重构又不是马上能完成的。所以,我们把大部分内部业务系统转到了内网,先收掉不必要的公网入口。这样能缩小暴露范围,不过权限控制和后续修复还是得继续做。
最后说回来,AI 写的代码也一样会有漏洞。代码生成越来越快,如果审核和测试跟不上,有问题的代码也可能更快地进入线上。
所以,内部系统能做网络隔离的,就尽量放在内网。必须放在公网的,从技术方案选型、代码审核,到上线后的安全防护,都得慎之又慎。
最后,祝好。
记录 AI 研发实践、系统架构,以及工作与生活中的思考。
AI Coding 时代最大的护城河,不是模型,不是 Agent,也不是工作流。 而是知识库。 这是我折腾了一整年 AI Coding,到最后才慢慢看明白的事。 可一开始,我和大多数人一样,劲儿全使在另一个地方——工作流。 怎么把写 PRD、出方案、写代码、生成测试串成一条链路,让 AI 一步步往下跑。 工作流跑通了,下一个问题马上冒出来—— AI 跑这些命令的时候,到底读什么? 光给它代码,不够。 于是所有人又一窝蜂去搞知识库。研发在搞,产品在搞,业务也在搞。 可搞着搞着我发现一件事:几乎没人能说清,知识库到底该是什么。 先说说,知识库不该是什么 很多人理解的知识库,是"把代码翻
最近 Loop Engineering 在持续刷屏。 公众号在刷,各种群里在讨论,我也看了好几篇文章。 每篇都有道理——五个组件、目标定义、古德哈特定律,逻辑很清晰,我都信了。 但看完之后有点空。 我的工作流该怎么 Loop 化?从哪起手?搭出来以后长什么样? 没一篇说清楚。 所以想聊聊我自己的理解,以及我们实际在做的事——我们团队搭了个叫 Talos 的系统,算是目前我见过最接近"生产级 Loop Engineering"的垂类实践。 Loop 其实只有两种形态 在我看来,Loop Engineering 这件事,放长了看只有两个终点。 第一个是通用智能 AI。 它足够强
去年开始,团队里每个人都用上 AI 写代码了。 按理说,效率该起飞了。 可折腾了大半年,我才慢慢看清:每个人都明显变强了,但团队的合力却没跟着强起来。 会用 AI 的人,效率飞涨。 用得浅的人,被甩在后面。 几十个开发,几十套打法——各自的 prompt 习惯、各自的提示词、各自摸索出的一套方法。 这本来不是坏事。 坏就坏在,大家的产出开始对不上了。 同一个功能,不同人让 AI 写出来的代码,风格能差出十万八千里。 某个同事摸到一个好用的技巧,群里截图一发,热闹两句,然后就沉底了。 下一个新人进来,还是从零开始踩。 文档呢?散在各个服务的 README 里,或者干脆躺在某个人的电脑里。 遇到跨
前面几篇,聊了团队怎么搭 AI 工作流、怎么建知识库。 今天聊聊 AI 在 PRD 编写和质量保障上,我们做了些什么。 其实这块从一开始就在工作流里。只是在开始的MVP版本里,核心全压在开发环节。 等大家真用起来,一个问题立马浮出水面: PRD 质量一般,工作流出来的技术方案,质量自然也上不去。 道理特别朴素:垃圾进,垃圾出。 源头的 PRD 含糊,后面 AI 再能干,也只是替你把这份含糊"发扬光大"。 所以我决定还是要治理一下这个源头。 第一步:先给 PRD 做个体检 我做的第一件事,是一个 PRD 质量检测 skill。 注意,它不碰业务逻辑,只做"规范层&q
最近这几天,我又开始焦虑了。 原因是,我突然意识到一件事。 已经有一阵子,没人反馈 Zeus 的问题了。 Zeus 是我们团队做的一套 AI Coding 工具体系。 说白了,就是想让 AI 把"写代码"这件事,从头到尾接过去。 用了两个多月,大家从一开始的别扭、吐槽、不信任,慢慢变成了—— 用得挺顺。 顺到,没人抱怨了。 按理说,这是天大的好事。 可那一刻,我心里咯噔一下。 因为"没人提问题",有两种可能:一种是真的没问题了,另一种是,大家已经看不见问题了。 我估计,是后者。 浮在水面上的,是看得见的成绩 这半年,团队是真的变样了。 Zeus、Zeus