环境字符串什么时候不具有“名称=值”形式?

环境字符串什么时候不具有“名称=值”形式?

如果我是正确的,进程的环境是一个字符串数组。字符串通常具有“名称=值”的形式,但不一定。我想知道字符串没有“名称=值”形式的目的是什么?谢谢。

答案1

我不知道任何实际使用或期望不包含=.这些通常是病态病例。

GNUenvprintenv将忠实地打印它们。

对于某些语言,这些字符串将是遥不可及的。例如,如果您perl使用fooenv 字符串进行调用,它不会显示在 中keys(%ENV),但perl仍会将其传递给它执行的命令(除非您重置整个%ENV哈希)。

因此,人们可能会使用它来绕过某些环境清理(尽管正确的环境清理应该从空环境开始)。

某些工具(如某些 shell)将它们从接收到的环境中剥离出来,并且不会将它们传递给它们执行的命令,因此一般来说依赖它并不是一个好主意。

除了=-less env 字符串之外,其他病态情况还包括具有重复变量名的 env 字符串(例如 Bothfoo=goodfoo=bad传入的envp),这已被视为导致漏洞(例如CVE-2016-2381) 和 env 字符串,如=foo(空变量名;注意 POSIX putenv()/getenv()可以设置/获取该变量,但不能setenv())。

相关内容