一条网络安全铁律:人,永远是链条中最脆弱的那一环。可如果这“人祸”来自正在策划加密钓鱼的攻击者本人,又会发生什么?结果荒诞到令人发笑。
几天前,我发布了 Sentinel,一个用 Go 写的静态编译、上下文感知的 Git 秘密扫描器和 pre-commit 钩子。为了测试它在真实环境中的表现,我开始随机扫描 GitHub 上最近更新的仓库,想看看 Sentinel 是否能抓到传统正则工具容易漏掉或淹没在噪音中的边缘凭证。
![]()
扫描结果马上弹出了一条“严重”级别的告警,指向一个相当可疑的仓库。点开被标记的文件后,问题一目了然:有人把一整套硬编码的 Firebase 配置对象——包含 API 密钥、项目 ID、消息发送方 ID——完整暴露在了公开仓库里。
这像极了一个脚本小子对着 AI 要了一份登录页面模板,然后看也不看就把前端代码贴进了公开仓库。在项目还没发布前,攻击者就把自己后端基础设施的管理钥匙亲手交给了全世界。
出于职业好奇心,我顺着仓库关联的 Vercel 部署地址看了一眼。这个项目试图冒充全球最大稳定币 Tether(USDT),堂而皇之地摆上了官方 logo、吸睛标语,以及一个专门用来收割凭证的登录框。
然而,因为骗子盲目复制了一个面向普通消费者的应用模板,摆在受害人面前的认证选项诡异无比:
- 使用 Google 继续
- 使用手机号继续
- 使用 Spotify 继续
没错,这位攻击者正试图通过让受害者用流媒体音乐账号登录的方式,来窃取加密钱包。这是何等纯粹的业余水平。
我没打算放过这件事。直接杀到骗子的 GitHub 仓库,开了一个公开 Issue,送上一条“专业建议”。
Issue 标题:想骗别人,先学会保护自己。
评论内容:“去问问你用过的那款 AI,把这些信息留在公开仓库有什么风险,傻瓜。想干这行,先学再试。”
通过在 Issue 中公开暴露他们的密钥,并点出这一缺陷,对方的 Firebase 项目随即被预警,这个钓鱼网站在开始收割任何受害者之前就被彻底掐灭。
笑话归笑话,这件事恰好刺破了现代软件开发中一个沉重的事实。
AI 代码生成是一把双刃剑。对生成出来的代码不求甚解、盲目复制,尤其在没有理解环境变量的重要性之前就直接部署,会把整个后端的软肋一并暴露出去。攻击者自己也落入了同样的陷阱:AI 帮忙搭出了一套登录界面,却把生产环境的密钥打包在明文中,就像把自家保险柜密码写在了门垫下面。
Sentinel 被设计成上下文感知的扫描器,能够识别硬编码密钥周围的代码结构,因此能在几秒内判断出这是一份真正的泄露,而不是测试或示例占位符。这一特性让它在这次随机扫描中准确命中了目标。
对于开发者来说,这则小故事至少提醒我们三件事。第一,把所有密钥、令牌、配置变量移到环境变量或专用凭据管理服务中,哪怕只是随手做的一个小 demo。第二,在使用 AI 生成的代码块之前,至少追查一下其中每个字段的含义,特别是那些包含“key”“secret”“token”的对象。第三,在项目启用 pre-commit 钩子,防止自己或者团队成员再把密码像公共便签一样贴出去。
至于那个寄希望于 Spotify 登录来骗 U 的“黑客”,我想他得到的教训可能更直接:在你按下部署按钮之前,AI 帮你写代码,但它不会替你思考。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.