基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
编程提效2026-10-26 18:30

Claude Code 误删案例暴露目录联接风险

dev.to · AI#Claude Code#Windows#Agent安全
Editor brief · 编辑速览

文章转述一起 Windows 事故:Claude Code 在跳过权限确认的模式下清理项目,递归删除据称沿 NTFS 目录联接越出项目边界,波及用户目录。案例涉及 Git Bash、pnpm 生成的联接和脚手架重建流程。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

一次 Next.js + Payload CMS 项目的初始化,最后变成了 Windows 用户目录的数据丢失事故。按原文转述,Claude Code 为了重新搭建项目执行了一条删除命令,却经由 NTFS 目录联接越出了项目边界,报告者估计损失约 165.66GB 数据。

这件事值得看,不只是因为用了 rm -rf。它把三个容易被分开讨论的问题叠在了一起:Windows 文件系统的链接语义、Git Bash 的删除行为,以及关闭权限检查后,AI 编程工具能直接执行到哪一步。

删除项目,为什么会碰到整个用户目录

GitHub issue #36339 提交于 2026 年 3 月 19 日。报告中的环境是 Windows 11、Git Bash 和 Claude Code v2.1.51,启动时启用了 --dangerously-skip-permissions。

任务起点很普通:生成一个 Payload CMS 网站模板。

pnpm dlx degit payloadcms/payload/templates/website aldaba-v2

这里要留意模板来源 payloadcms/payload/templates/website。生成后,独立安装遇到了 workspace:* 依赖问题,也就是模板中的依赖声明仍然依赖原工作区的上下文。Agent 选择删除目录,再重新开始。

它随后执行了这条清理命令:

rm -rf /c/Users/guido/aldaba-v2

要留意目标路径:命令写的是项目目录,事故报告描述的删除范围却扩展到了 C:\Users\guido。

原文给出的解释是,pnpm 在模板的 node_modules 中创建了 NTFS 目录联接(junction)。它看起来像目录,实际指向另一个位置。按照原文对事故的描述,Git Bash 的 rm -rf 沿着联接进入真实目标,其中一个联接指回用户目录,于是递归删除越过了项目边界。

原文称,相关问题在 PowerShell Core 6+ 中已经处理,但没有回补到 Claude Code 的 Bash 工具所调用的 Git-for-Windows 工具链。这里描述的是特定工具链的行为,不能据此认定所有环境中的 rm -rf 都会以同样方式处理链接。

命令里的目标路径,并不一定等于实际受影响的数据边界。

损失很具体,但证据还没有闭环

报告者估计,约 165.66GB 数据被删除,涉及 1,593,350 个文件和 276,382 个文件夹,包括个人文件、AppData,以及业务正在使用的数据。删除前后都没有出现警告或确认,用户是在发现桌面空了之后才察觉异常。

提交 issue 时,付费 NTFS 数据恢复仍在进行,尚未恢复出数据。原文没有给出最终恢复结果,因此不能把当时的状态写成永久无法恢复的结论。

issue 带有 bug、data-loss 和 has repro 标签,还关联了此前的 #29249、#29023。按原文统计,这是第三起同类故障形态的报告。但标签和关联工单并不等于独立验证:原文明确承认,没有在案的第三方复现记录。

约六周后,GitHub Actions bot 以 stale 和「not planned」关闭了工单。按原文记录,没有维护者回应,也没有修复交付。它说明问题没有在这张工单里获得处理,尚不足以证明每份报告的底层原因都已确认一致。

我的判断

作者把文件删除问题和 Agent 的执行方式放在一起看,这个方向成立。即使由人手动执行,同样的工具链问题也可能造成损失;Agent 增加的风险,在于它可以把「安装失败,删掉重来」连续执行下去,而运行环境又允许它直接动手。

但这次启用了 --dangerously-skip-permissions。这个参数按设计就会关闭 Claude Code 自身的权限检查。原文没有说明正常模式下,这条命令是否一定会触发确认,因此不能直接得出「默认配置也会无提示删掉用户目录」的结论。

同样,普通的执行确认与删除范围检查是两回事。即便弹窗完整展示了命令,用户看到的仍然可能只有项目路径。要识别联接指向哪里,需要额外检查文件系统关系,原文没有证明 Claude Code 做过这一步。

我更看重这次事故暴露的工作边界问题:可随时重建的项目,应该放在可承受整体丢失的环境里。

这是基于事故机制的工程判断。原文没有比较权限确认、容器、虚拟机等方案的防护效果,也没有给出对照实验,不能替其中任何一种方案承诺绝对安全。

能拿来做什么

  • 在 Windows 上处理 pnpm 项目时,递归删除前先检查 node_modules 中的 junction 及其目标;不要仅凭命令参数里的路径判断删除范围。
  • 为 Next.js、Payload CMS 这类模板试验准备独立环境,例如专用虚拟机,并限制它能访问的个人和业务数据。不要把整个用户目录暴露给可丢弃的试验项目。
  • 将「生成项目」与「删除已有目录」分开授权。遇到 workspace:* 安装问题,先定位依赖声明和工作区要求,再决定是否需要重建。
  • 日常 AI 编程保留权限检查,谨慎使用 --dangerously-skip-permissions。同时给重要数据保留可恢复的备份,因为执行确认无法替代恢复能力。
Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
让 Claude 写动画代码,再逐帧合成视频
下一篇
用 SQLite 混合检索构建代理记忆

资讯速览

dev.to · AI · 2026-10-26 18:30

AI 评分 8.0 / 10

相关标签

#Claude Code#Windows#Agent安全

继续阅读

  • 用事实提取与占位符测试约束 AI 文档
  • 让 Claude 写动画代码,再逐帧合成视频
  • 用 SQLite 混合检索构建代理记忆
  • 为 AI 代理建立分级审批规则
  • 用本地混合检索补足大模型长期记忆