vscode Shell集成随机数不可用,未知的Shell

wtlkbnrh  于 6个月前  发布在  Vscode
关注(0)|答案(5)|浏览(62)

当所有扩展都被禁用时,这个问题是否会发生?:是/否

  • VS Code 版本:1.82.0-insider
  • OS 版本:Linux x64 6.4.6-1-MANJARO

重现步骤:

  1. 创建一个不支持 shell 集成的 shell(例如 Julia)终端。
  2. 检查 VSCODE_NONCE 环境变量的值
    通过扩展打开 Julia REPL 时,显示预期的警告:
2023-08-10 17:18:24.085 [warning] Shell integration cannot be enabled for executable "/home/pfitzseb/Documents/julia-1.8.5/bin/julia" and args ["-i","--banner=no","--project=/home/pfitzseb/.julia/environments/v1.9","--sysimage=/home/pfitzseb/Documents/Git/sysimgtest/sysimg.so","--project=/home/pfitzseb/Documents/Git/sysimgtest","--threads=auto","/home/pfitzseb/.vscode-insiders/extensions/julialang.language-julia-1.48.1/scripts/terminalserver/terminalserver.jl","/tmp/vsc-jl-repl-901c22ba-51e1-41a7-a1b6-4aacdc696676","/tmp/vsc-jl-cr-54bf6211-7f7f-4cdc-825c-e19c2557ca71","USE_REVISE=false","USE_PLOTPANE=true","USE_PROGRESS=true","ENABLE_SHELL_INTEGRATION=true","DEBUG_MODE=false"]

这是因为只有在 VS Code 检测到支持的 shell 时,才会注入环境变量(这意味着处理 shell 集成的脚本已经被打包):
vscode/src/vs/platform/terminal/node/terminalEnvironment.ts
6e2cace 中的第248行到第250行:
| | logService.warn(Shell integration cannot be enabled for executable "${shellLaunchConfig.executable}" and args,shellLaunchConfig.args); |
| | returnundefined; |
| | } |
一个简单的解决方案是允许扩展在 vscode.window.createTerminal 中设置 nonce(然后由扩展负责仅启动能够正确处理并取消设置 VSCODE_NONCE 环境变量的 shell)。不确定这是否符合期望的安全标准 :)

tyu7yeag

tyu7yeag1#

与其让createTerminal被设置,这对于未来的扩展作者来说可能会有点难以理解,不如我们直接在启用shell集成时总是设置VSCODE_NONCE?
这样我们就有这样的东西:

if (this._options.shellIntegration.nonce) {
	this._ptyOptions.env ||= {};
	this._ptyOptions.env['VSCODE_NONCE'] = this._options.shellIntegration.nonce;
}

在这个if语句中:
vscode/src/vs/platform/terminal/node/terminalProcess.ts
99dad5d中的第203行到第204行
| | if(this._options.shellIntegration.enabled){ |
| | injection=getShellIntegrationInjection(this.shellLaunchConfig,this._options,this._ptyOptions.env,this._logService,this._productService); |

brgchamk

brgchamk2#

但是,随机数可用于在任何启动的shell中运行的任意程序,然后可以欺骗命令?
此外,this._options.shellIntegration.enabled 是否直接从 terminal.integrated.shellIntegration.enabled 设置派生,还是它还检查正在启动的shell?

kdfy810k

kdfy810k3#

好的点👍
我会看看是否很难允许扩展设置VSCODE_NONCE

snvhrwxg

snvhrwxg4#

现在我再次考虑这个问题:扩展提供的随机数可能没有太大的价值——重要的部分是扩展应该明确选择设置环境变量。

798qvoo8

798qvoo85#

nonce目前没有做太多事情,但随着时间的推移,我希望它会被更多地使用。当我们在不先向用户展示的情况下重新运行命令时,我们需要nonce或用户确认。不过如果不是这样,也没关系,我会检查一下,因为这可能很容易。

相关问题