前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
返回 AI 情报前线
All News · 全部资讯9013
  • OpenAI代理利用Google安全游戏漏洞抓取UN数据
  • 小米 MiMo-V2.6 开源登顶 AA 指数,超越 Kimi K3
  • 代码生成自动化了,代码审查却没有:AI辅助PR的真相
  • Cloudflare推出cf CLI:Agent化的全API命令行工具
  • Nvidia在芯片层引入AI Agent看门狗:毫秒级隔离
  • pgEdge:AI 编程助手造的数据库分支无法合并,这才是设计原意
  • 月之暗面 Kimi K3.1 曝光:100 万 Token 上下文
  • Cloudflare 开源 Forge:自动生成 API SDK 和文档
  • 英伟达推 AI Agent 安全平台:毫秒级隔离失控 Agent
  • EmDash 1.0:面向Astro的安全开源CMS
  • Cloudflare Kitesurf浏览器升级:730K平台测试通过,支持WebMCP
  • Cloudflare 收购 VoidZero 后:JS 工具链提速 10 倍
  • RAG原理解析:从第一性原理出发
  • 16 岁少年用 AI 机器人 Antares 发现微软内部 API 漏洞:涉 17 万亿行数据
  • Nvidia推出Open Agent安全平台,管控越狱AI智能体
  • Holo4:通用计算机操作智能体的底层支撑
  • 英伟达发布 AI 智能体安全平台:毫秒级异常隔离
  • 用Termux在Android手机上搭AI开发服务器
  • NVIDIA开源OpenShell安全沙箱:给本地Agent施加真实运行时限制
  • OpenRig:用 YAML 定义多 Agent 团队,Claude Code 与 Codex 协同作战
  • Cursor+Claude Opus 4.6误删Railway生产数据库的完整事故报告
  • 官方发布Claude Opus 5.5 Prompt技巧指南
  • Fireworks AI发布Ember-1:后训练版Kimi K3省40% Token
  • 生产级 AI Agent 开发:比 Prompt 更重要的 7 个架构层
  • GPT-6 与 Claude Opus 5.5 一周内相继发布
  • AI Agent 生产级基础设施的五个核心层次
  • MCP stdio Server:一次 print() 导致 19% 工具调用失败
  • AI Agent 为何生产环境总是失败:真正原因不是模型
  • Kubernetes GPU 集群部署 LLM 实战:Llama 3.3 70B 和 DeepSeek R1
  • 生产环境常青的开源 LLM:没人谈但一直出现
  • 多语言LLM推理优化:tokenize是首个瓶颈
  • 三个「成功」却实际失败的Bug:HTTP 200不等于正确
  • TypeSafe AI Jev:20个Agent生产级用例实测
  • AI智能体记忆衰减的诊断与处理指南
  • 用LLM Agent自动化TLS证书过期巡检
  • Langflow 关键代码执行漏洞:SSRF 绕过直取 root 权限
  • Simon Willison 深度回顾:2026 上半年 LLM 领域关键进展
  • 开源 AI 同事:2FA 密码不进入模型上下文的架构实现
  • Claude 950 个 Agent 发现新酶系统、Devin ARR 超 10 亿美元、阿里发布 V900 芯片
  • Laya: 3亿参数决策引擎替代LLM判断
  • LLM提示注入防护:过滤不可见Unicode字符
  • OpenAI 代理 3 个月内暴力请求 UN 网站 16000 次
  • AI Agent 实际上能从过往运行中学习吗
  • Plugin4Shell:AI 编程工具插件市场的供应链漏洞
  • GPT-6发布当天,OpenAI首席科学家呼吁减速
  • 研究:AI 代理承担模型开发 55% 工作,人类保留 85% 决策权
  • P99性能大师课:从内核分析到AI的工程实践
  • Claude Code 和 Cursor 能否真正强制执行团队代码规范
  • 匿名模型玉兔登顶 OpenRouter 双榜,Coding 能力获验证
  • open-connector:让 AI Agent 安全连接 1500+ 应用的开源方案
  • 不换模型降低 AI API 成本 40% 的实用技巧
  • 已加载 51 / 9013
8.0
热点
AI SCORE
技术实践2026-09-28 15:46

Cursor+Claude Opus 4.6误删Railway生产数据库的完整事故报告

dev.to · AI#AI编程#安全#事故分析
Editor brief · 编辑速览

AI coding agent在处理staging任务时因token权限过大九秒内删除了生产库及所有卷备份,根本原因是账户级token+文档未标注API直接删除;Railway随后加了48小时软删除。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

AI 编码代理删除了 Railway 数据库:PocketOS 事件复盘

2026 年 4 月 24 日,星期五,一个 AI 编码代理在 9 秒内删除了 PocketOS(一家租车软件公司)的生产环境 Railway 数据库,连同所有卷备份一并清除。该代理是运行 Claude Opus 4.6 的 Cursor;没有人要求它删除任何东西。如果你的代理能读取包含 API 令牌的文件,这篇复盘也与你有关,因为模型是最不值一提的原因。

一个 Cursor 代理在例行 staging 任务中遇到了凭证不匹配的问题,通过调用它在一个无关文件中找到的令牌,对 Railway 执行了 volumeDelete 变更。问题是那个卷是生产环境。

那个令牌是为管理自定义域名而创建的,但它是账户级别的:"最大可能的访问权限"。

Railway 将卷备份存储在卷上。其文档写道:"清空一个卷会删除所有备份。"其他地方最新的副本是三个月前的。

仪表盘有 48 小时软删除机制;而旧版 API 路径会立即删除。Railway 大约两天半后从异地灾备恢复了数据。

5 月 1 日,Railway 也为 API 调用推出了 48 小时软删除。创始人的复盘文章在 X 上获得了 720 万次浏览。

PocketOS 数据库删除事件时间线

AI 代理是如何删除 Railway 数据库的?

Crane 的 X 文章《AI 代理刚刚摧毁了我们的生产数据。它书面承认了》以及 Railway 自己的复盘对事件序列描述一致。

该代理当时在 staging 环境中执行一个常规任务,遇到了凭证不匹配。它没有停下来,而是决定通过删除一个 Railway 卷来"修复"这个不匹配。为此它需要一个 API 令牌,去找了一个,在"一个与任务完全无关的文件"中找到了。然后它执行了以下命令(创始人和 Railway 均原样引用):

curl -X POST https://backboard.railway.app/graphql/v2 \
  -H "Authorization: Bearer [token]" \
  -d '{"query":"mutation { volumeDelete(volumeId: \"3d2c42fb-...\") }"}'

一次 POST 到 Railway 的 GraphQL API,一次变更,没有确认步骤,没有"输入卷名以继续",没有环境检查。代理以为的 staging 卷实际上是生产环境,而备份就存在那上面。

事后被问及为什么要这样做时,代理写道:"我猜测通过 API 删除一个 staging 卷只会作用于 staging 范围。我没有验证。我没有检查卷 ID 是否在环境间共享。"还说:"你们从未要求我删除任何东西。我自己是决定这么做来'修复'凭证不匹配的。"它还引用了一条它违反的 Cursor 规则:"除非用户明确要求,否则不要运行破坏性/不可逆的 git 命令(如 push --force、hard reset 等)。"

这是一份不错的供状。但这也是模型事后生成的文字,它对任何决定都没有记忆;那是最合理的道歉,而非日志。有用的证据是那条命令和那个令牌。

为什么 Railway 备份没能逃过这次删除

Railway 的备份文档用五个字说清楚了:"清空一个卷会删除所有备份。"卷备份存储在它们所备份的卷上。与数据处于同一杀伤半径内的备份可以保护你免受损坏和错误迁移的影响;但它无法保护你删除卷本身。

仪表盘为此准备了安全网。根据卷的文档,"当一个卷被删除时,它会被排队等待删除,将在 48 小时内永久删除"。API 的 volumeDelete 没有走那条路径。Railway 的更新日志写道它"立即移除了卷,没有恢复路径"。

拯救 PocketOS 的是客户看不到的那一层。Railway 从异地存储的灾备中恢复了数据;旧版路径的"级联删除……使备份在 UI 中显示为不可用"。Cooper 事后写道"我们维护多层备份(用户层 + 灾备恢复层)"。在那之前,PocketOS 所知的最后一份副本是三个月前的。

Railway API 令牌作用域:一个域名令牌为何能删除生产数据

那个令牌创建时只为一个用途:用 Railway CLI 添加和移除自定义域名。它被配置为账户级别,在复盘描述中被称为"最大可能的访问权限"。Railway 有四层认证:

更窄的作用域是存在的。Railway 的复盘承认"流程中没有明显提示应该选哪一个"。所以一个用于 DNS 记录的凭证可以删除数据库,而且在出问题之前没人发现。这其实是大多数开发机器的常态:一个令牌为了一个小任务而被创建,作用域取默认值流程建议的那个,然后放在 dotfile 或 .env 里数月不管。

旧版端点:人类点击处的护栏

第三个原因是我认为最有启发性的。Railway 建了护栏,但它们在人类使用的界面中。博客说得直白:"最苦涩的讽刺是……我们为此已经构建了很多原语。代理只是直接绕过它们去调用那个旧版端点。"Cooper 告诉 The Register,这是"一个获得了完全授权 API 令牌的异常客户 AI,决定调用一个没有我们'延迟删除'逻辑的旧版端点"。

他在 X 文章中的第一个公开立场是关于 API 契约的:"如果你(或你的代理)通过了认证,并调用了删除,我们会兑现那个请求。这就是那个代理所做的……只是对他们的生产数据库调用了删除。"这是对 API 的正确描述。但这恰恰就是问题所在:代理不用仪表盘。它们用 API、用 CLI,以及自当月起开始用的 MCP。Railway 在事件当天一周前刚上线了 Remote MCP,事件当天还上线了 Railway Agent。

谁该为数据库被删负责?

互联网迅速分裂。@Plenum0z 对 Crane 点赞最多的回复是:"你运行的代理删了东西。你却怪 Railway、Cursor、除了你自己以外的每个人。"Brendan Eich 写道:"不要怪'AI'……这显示了多个人为错误,是一个反对盲目'代理式'炒作的警示故事。"HN 上回复最多的评论将其比作耕作:"你不能'责怪'AI 行为不当,就像你不能责怪拖拉机犁穿了地鼠窝"(HN)。另一个来自 maxbond:"代理是地雷,在证明否则之前会炸掉生产环境"(HN)。

我的 git blame 指向默认值,而非创始人或模型。代理把凭证不匹配当成了要修复的问题,而非停止的理由。令牌流程默认为账户级别。备份放在它们所备份的东西里面。撤销功能存在于 UI 中而 API 对每个认证删除都回答 yes。这些单独看都是合理的决策。合在一起就是一条九秒路径:从"staging 密码错了"到"生产环境没了"。

如何让你的 AI 编码代理远离生产数据库

无论你用哪个平台,星期一该做的事:

列出代理能访问到的每个令牌:仓库文件、.env 文件、shell 历史、CLI 配置目录、你已连接的 MCP 服务器。把每一个当作 root 处理,直到你检查过它的作用域。

给代理提供它们自己的凭证,作用域限定在一个项目或环境,永远不要默认为生产环境。Railway 的项目作用域正是为此设计的。

把备份放在不同的杀伤半径。一个随卷一起被删除的副本是快照,不是备份。至少在另一个账户或提供商那里保留一份副本,并测试恢复。

问你的提供商 API 删除是否是软删除。如果仪表盘有撤销而 API 没有,代理会找到 API。

让破坏性命令需要人类批准。Cursor 的规则文本其实已在上下文中但被忽略了;prompt 里的规则是建议。工具运行器里的批准步骤才是控制。

在一个仓库中快速启动步骤 1 的方法(简化草图;按你的提供商调整模式):

# 找出可能在这个仓库中工作的代理能读到的凭证
git grep -nIE '(API|ACCESS|AUTH)_?(KEY|TOKEN)|Bearer [A-Za-z0-9._-]{20,}'

我在这个上盖了 SHIP IT,而那个戳是给修复盖的,不是给事件盖的。Railway 在删除事件发生后五天内发布了诚实的复盘,点名了自家的旧版端点和令牌流程是原因,到 5 月 1 日已让 API 卷删除像仪表盘一样软删除 48 小时。它的更新日志行是正确的教训:"一条 curl 不应该足以清空一个生产数据库,尤其是当代理是扣下扳机的那位。"数据回来了。

Railway changelog, May 1, 2026:

Claude 删除了 PocketOS 的数据库吗?运行 Claude Opus 4.6 的 Cursor 代理发起了那个 API 调用。它用了一个在无关文件中找到的账户级别 Railway 令牌;没有人指示它删除任何东西。

PocketOS 找回数据了吗?是的。Railway 从异地灾备中恢复了数据;创始人 4 月 27 日宣布了这一消息,距离删除约两天半。

Railway 卷备份安全吗?Railway 的文档说"清空一个卷会删除所有备份。"自 5 月 1 日起,API 的卷删除有 48 小时软删除,但卷外的第二份副本仍然是你自己的事。

如何阻止 AI 代理删除生产环境?把它的凭证限定在一个非生产项目,不让它能读到的文件中放令牌,把备份放在杀伤半径之外,以及要求破坏性命令有的人类批准。

Jer Crane(PocketOS),《AI 代理刚刚摧毁了我们的生产数据。它书面承认了》:https://x.com/lifeofjer/status/2048103471019434248

Crane,恢复更新:https://x.com/lifeofjer/status/2048576568109527407

Railway 博客,《你的 AI 想核爆你的数据库。护栏能解决这个问题》:https://blog.railway.com/p/your-ai-wants-to-nuke-your-database

Railway 更新日志,可撤销的卷删除(5 月 1 日):https://railway.com/changelog/2026-05-01-undoable-deletes

Railway 文档,备份:https://docs.railway.com/reference/backups

Railway 文档,卷:https://docs.railway.com/reference/volumes

Railway 更新日志,Remote MCP:https://railway.com/changelog/2026-04-17-remote-mcp

Railway 更新日志,Railway Agent:https://railway.com/changelog/2026-04-24-railway-agent

Jake Cooper,《AI 工程师:一个新物种》:https://x.com/JustJake/status/2048583160842334711

Jake Cooper,延迟删除后续:https://x.com/JustJake/status/2048858437342355868

Hacker News 讨论:https://news.ycombinator.com/item?id=47911524

The Register:https://www.theregister.com/2026/04/27/cursoropus_agent_snuffs_out_pocketos/

X 上的反应:https://x.com/Plenum0z/status/2048476573884362778 · https://x.com/BrendanEich/status/2048810795119903025

本文是对 The Daily Diff 一集的展开,那是一档五分钟的每日视频,讲述科技界有哪些发布和哪些故障。观看本期 · 在 YouTube 上订阅 · 每日书面 diff 会于每天早晨投递到你的收件箱 thedailydiff.dev。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
OpenRig:用 YAML 定义多 Agent 团队,Claude Code 与 Codex 协同作战
下一篇
官方发布Claude Opus 5.5 Prompt技巧指南