聊天讨论 AI Agent 9 秒删光了生产数据库——我给自己的项目做了 5 个紧急检查

193577746(kyriewen) · July 30, 2026 · 12 hits

AI Agent 9 秒删光了生产数据库——我给自己的项目做了 5 个紧急检查

突然看到之前 5 月份的一个新闻!

一家叫 PocketOS 的租赁软件公司,创始人在用 Cursor 的 AI Agent 做开发。Agent 在执行任务时发现了一个平台的 Token——不是它该碰的文件里的 Token。然后它用这个 Token 连上了生产数据库,9 秒之内把整个数据库删光了,包括备份。

30 小时宕机。全公司只能从三个月前的异地备份恢复。三个月的客户数据,没了。

更离谱的是另一个案例:Replit 的 AI Agent 删除了 1206 条高管记录后,自动生成了 4000 条假数据来填补空缺——试图掩盖它刚刚造成的灾难。

我当时看完这两个事件后做的第一件事,是打开自己的项目,逐条检查 AI 工具能接触到的所有东西。以下是我检查的 5 个点。

检查一:Token 权限范围

PocketOS 出事的根本原因:一个权限过大的 Token 被 AI 发现了

AI 工具在执行任务时会读取工作目录下的所有文件,包括.env。如果 Token 有完整权限,AI 就有完整权限。

# ❌ 典型的"图省事"配置
DATABASE_URL=postgresql://admin:password@prod:5432/main
RAILWAY_TOKEN=rly_xxxx  # 完整项目权限

# ✅ 最小权限原则
DATABASE_URL=postgresql://readonly:xxx@dev:5432/dev_db
# 生产Token通过CI/CD注入,本地不存在

检查方法:

grep -r "TOKEN\|SECRET\|PASSWORD" .env*

铁律:AI 能看到的 Token = AI 拥有的权限。本地不放任何能写生产数据的凭证。

检查二:分支保护

AI Agent 完成任务后可能自动 commit 并 push。如果 main 没保护,AI 代码不经 review 直接上线。

必须设置:

  • main 分支禁止直接 push
  • 合并需要至少 1 人 review
  • CI 测试通过才能合并

再加个 pre-push hook:

#!/bin/sh
# .husky/pre-push
branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$branch" = "main" ]; then
  echo "❌ 禁止直接push到main"
  exit 1
fi

检查三:网络隔离

PocketOS 的 Agent 能连接外部数据库——说明没有网络隔离

开发时用 Docker 限制 AI 的网络范围:

# docker-compose.yml
services:
  dev:
    build: .
    networks:
      - dev-only  # 只能访问开发库

networks:
  dev-only:
    internal: true  # 禁止外网

退一步说:就算不用 Docker,至少确保 AI 工具的配置里没有生产环境连接信息。

检查四:备份验证

PocketOS 的备份是三个月前的。设了自动备份但从来没验证过能不能恢复。

平台 备份方式 恢复粒度
Supabase 自动每日 (Pro 有 PITR) 秒级
PlanetScale 自动分支快照 分支级
Vercel Postgres 每日快照 需手动验证

铁律:备份≠恢复能力。每月至少跑一次恢复演练。

检查五:操作审计

Replit 案例最恐怖的点:AI*生成假数据掩盖*。没有日志,你甚至不知道数据被改过。

// Prisma中间件 — 记录所有破坏性操作
prisma.$use(async (params, next) => {
  const destructive = ['delete', 'deleteMany', 'update'];
  if (destructive.includes(params.action)) {
    const before = await prisma[params.model]
      .findFirst({ where: params.args.where });
    const result = await next(params);
    await prisma.auditLog.create({
      data: {
        model: params.model,
        action: params.action,
        before: JSON.stringify(before),
        after: JSON.stringify(result),
        timestamp: new Date(),
      }
    });
    return result;
  }
  return next(params);
});

习惯:每次 AI 会话结束后,花 30 秒扫一眼 git diff。AI 改了什么,你得知道。

紧急检查清单

检查项 通过标准
Token 权限 本地只有 dev/readonly token
分支保护 main 禁止直接 push
网络隔离 开发环境连不到生产
备份新鲜度 最近备份<24 小时
操作审计 关键操作有记录

AI 不是敌人,但它不该有钥匙

PocketOS 创始人说了一句话:"AI didn't hack us. We just never locked the door."

AI 编程工具让效率翻了好几倍。但你不会把房子钥匙交给一个你认识三天的人——AI Agent 本质上就是这个角色。它很能干,但它不理解"后果"。

你的项目里,AI 能碰的东西有哪些?你设了什么限制?


觉得有用?点个「赞」👍 让更多人看到

关注我,获取更多技术干货。

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.