真正安全的做法是删除launch.json的env字段,改用envfile加载.gitignore保护的.env文件,并禁用showglobalvariables等高危选项。

VSCode插件调试本身不自动暴露敏感数据,但launch.json配置不当、环境变量加载方式错误或调试器权限失控时,会直接导致密钥泄露、本地文件读取甚至远程命令执行。
launch.json 中硬编码敏感值是最高危操作
很多开发者为图方便,在launch.json的env字段里直接写"DB_PASSWORD": "123456",这类配置一旦被提交到 Git 仓库,就等于把钥匙挂在门上。VSCode 不会阻止你这么做,但它也不会帮你加密或脱敏。
- 必须改用
envFile字段指向本地.env文件,例如:"envFile": "${workspaceFolder}/.env" -
.env文件必须加入.gitignore,且不能包含注释或空行(某些调试器解析失败) - 避免在
envFile路径中使用通配符或用户输入拼接,如"${env:HOME}/.myproject/.env"——这可能被恶意工作区劫持
调试器类型决定攻击面宽度
不同type值启用的调试能力差异极大:node调试器可访问process.env和require,而python调试器默认限制os.system调用,但若配置了justMyCode: false,就能单步进入标准库甚至subprocess内部。
- Node.js 调试中慎用
console.log(process.env)——它会把所有环境变量打印到调试控制台,包括NODE_OPTIONS里注入的恶意参数 - Python 调试应始终设
"justMyCode": true,否则攻击者可通过篡改site-packages中依赖包触发任意代码 - 对
type: "pwa-node"这类增强调试器,要确认是否启用了enableProvisionalRenderer——该选项允许渲染器进程执行未签名脚本
调试通信通道可能被中间人劫持
VSCode 调试协议(DAP)默认走本地回环(127.0.0.1),但如果配置了address或port并开启remoteEnabled,调试器就会监听外部端口。此时任何能访问该 IP 的设备都可发送evaluate请求执行代码。
- 禁用
address字段,让 VSCode 自动绑定localhost;若必须远程调试,用 SSH 隧道转发,而非开放公网端口 - 检查
attach模式下的processId是否来自可信进程——恶意插件可能伪造 PID 并诱使调试器附加到自身 - 不要在调试配置中启用
showGlobalVariables,它会让globalThis或__builtins__中的敏感对象(如fs模块)出现在变量面板
真正危险的不是调试功能本身,而是把调试当成“信任通道”来用:比如在调试器里临时修改process.env绕过鉴权,或用debugger;语句当后门入口。这些操作在开发机上看似无害,一旦配置同步到 CI 环境或团队共享模板,就变成稳定可复现的攻击链起点。











