最近在研究Claude Code的源码,当看到main.tsx中的main()函数时,发现它的第一行代码是这样:

如果注释上没有标记SECURITY,我可能就直接忽略它了,觉得这行代码不重要了,但是注释了SECURITY,就表示这行代码跟安全有关,那就值得研究一下了。
首先,这行代码并不难理解,就是给NoDefaultCurrentDirectoryInExePath这个环境变量设置为 '1'。
那就先查查NoDefaultCurrentDirectoryInExePath这个环境变量有什么用,问AI得到了答案:
NoDefaultCurrentDirectoryInExePath是一个Windows环境变量,它的主要作用是从可执行文件的搜索路径中移除当前工作目录(Current Working Directory, CWD)。
那Claude Code为什么设置呢?接下来分析总结一下。
Windows找命令的方式
当你在Windows中执行一个不带路径的命令时,比如claude,Windows搜索可执行文件的顺序是:
- 1.当前目录
- 2.系统目录
- 3.PATH
也就是当前目录是排在最前面的,也就是说,如果你在D:\project目录敲claude,Windows会先看D:\project\claude.exe存不存在,如果存在的话直接用它,根本不去管PATH里那个真正的claude。
这是DOS时代留下来的习惯,那个年代用户经常在一张软盘、一个目录里直接跑程序,把当前目录放最前面方便,这个习惯Windows一直继承到了今天。
而且,Windows在当前目录一旦找到匹配的可执行文件,就直接执行了,中间没有"确认是不是你想要的"这一步。
设想一个场景:你从网上下载了一个项目,cd进项目目录,跑了一条命令,比如git、node这类常用的,而那个项目目录里,恰好被人放了一个同名的恶意exe,因为当前目录排在搜索最前面,Windows就直接执行了恶意exe。
恭喜你中招了。
这种攻击叫"当前目录劫持",是Windows上一个老牌的安全隐患,攻击者不用碰你的系统目录,只要把一个恶意文件放进你会cd进去的目录,然后等着你执行就行了。
Mac和Linux为什么没事
同一个场景换到Mac或Linux上,什么都不会发生。
POSIX系统的shell默认不搜当前目录,你要跑当前目录里的程序,必须显式写./,比如./claude,shell才会执行它。
光敲claude,shell会直接先去PATH里找,根本不看当前目录。
所以那个恶意程序在Mac/Linux上不会被触发。

这就解释了为什么这行防护代码只针对Windows,Mac和Linux默认就没这个坑。
这行代码怎么起作用
回到那行代码,NoDefaultCurrentDirectoryInExePath是Windows系统自己认识的一个环境变量。
Windows启动进程的底层API叫CreateProcess,它内部会判断一件事:要不要把当前目录加进搜索路径?
判断的依据就是这个环境变量,只要它被设了,就表示不搜当前目录,于是CreateProcess就只在系统目录和PATH里找,跳过当前目录。
所以这行代码用的是Windows自己提供的开关,把"当前目录优先"这个危险默认关掉。
如果不是读源码,我可能永远不知道claude在Windows上启动的那一瞬,还发生过这么一件事。
如果这篇文章对你有帮助,欢迎 👍 点赞、⭐ 收藏、➕ 关注,这是对我持续输出的最大鼓励。
课程推荐
最近,我的 《AI原生超级全栈开发工程师训练营》第二期 正在招生中,以下是课程介绍。


课程分为五大板块,十三个专题
- 1.Vibe Coding:AI时代的编程新范式,未来拼的不是你手写代码多厉害,而是如何更好的指挥AI写代码
- 2.AI Agent:AI时代的产品新形式,任何产品都可以转型为AI Agent,使得产品更加智能化、个性化
- 3.项目实战:多个Vibe Coding + AI Agent项目实战,带你把所学知识真正做到融会贯通
- 4.大模型底层:深度学习、Transformer、LLM、大模型微调、多模态模型、强化学习等硬核底层知识
- 5.AI独立开发者:最合适程序员的一人公司模式,做出属于自己能变现的产品,开启创业之路的大门
六大课程亮点,绝对超值
- 1.课程内容全,课程覆盖了AI领域最重要的程序员必学知识点
- 2.讲师实力硬,所有内容都是我亲自讲,N年的积累都教给你
- 3.N期学习权限,你能跟着我一直学AI最新的技术,抓住趋势
- 4.大模型底层 + AI独立开发这两块,其他机构没有或讲得很浅
- 5.课程配套全,35万字课程笔记辅助学习,永久权限和VIP服务
- 6.性价比非常高,尽管对比,没有比我讲得多还价格比我低的
对标岗位或职业方向
- 1.AI全栈开发工程师
- 2.AI Agent开发工程师
- 3.AI应用开发工程师
- 4.大模型底层开发工程师
- 5.AI独立开发者
- 6.其他岗位也可以通过Vibe Coding得到加成
课程持续更新,报名后马上可以学习,新课招生,历史最低价,优惠名额有限,先到先得。

夜雨聆风