Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 通过环境变量传递参数,是否完全安全?_Bash_Environment Variables_Sh_Command Line Arguments_Sanitization - Fatal编程技术网

Bash 通过环境变量传递参数,是否完全安全?

Bash 通过环境变量传递参数,是否完全安全?,bash,environment-variables,sh,command-line-arguments,sanitization,Bash,Environment Variables,Sh,Command Line Arguments,Sanitization,我需要从服务器应用程序调用wget,url的一部分由用户控制。如果在服务器应用程序中使用setenv()将参数存储在环境变量URL中,则在forked shell中执行 wget somehost/"$URL" 我是否可以假设$URL没有以任何方式展开,并且它完全被解释为URL的一部分?这是否与Bourne shell兼容(例如Ubuntu中的sh而不是bash)在调用(forks/execs)wget命令之前,shell将执行$URL的参数扩展。由于该参数用双引号括起来,因此不会执行分词操作

我需要从服务器应用程序调用
wget
,url的一部分由用户控制。如果在服务器应用程序中使用
setenv()
将参数存储在环境变量
URL
中,则在forked shell中执行

wget somehost/"$URL"

我是否可以假设
$URL
没有以任何方式展开,并且它完全被解释为URL的一部分?这是否与Bourne shell兼容(例如Ubuntu中的
sh
而不是
bash

在调用(forks/execs)wget命令之前,shell将执行
$URL
的参数扩展。由于该参数用双引号括起来,因此不会执行分词操作,“somehost/whatever URL expansion to”将是一个参数

其他用户可以在
ps(1)
输出为命令加参数时看到结果

此外,如果系统上的
ps(1)
实现支持
-e
显示环境(例如FreeBSD),则存储在环境变量中的数据可能可见


如果您的问题是,是否可以通过这种方式隐藏敏感信息,如访问凭据,那么答案通常是“否”。

在调用(forks/execs)wget命令之前,shell将执行
$URL
的参数扩展。由于该参数用双引号括起来,因此不会执行分词操作,“somehost/whatever URL expansion to”将是一个参数

其他用户可以在
ps(1)
输出为命令加参数时看到结果

此外,如果系统上的
ps(1)
实现支持
-e
显示环境(例如FreeBSD),则存储在环境变量中的数据可能可见


如果您的问题是,是否可以通过这种方式隐藏敏感信息(如访问凭据),通常的答案是“否”。

如何从服务器应用程序运行wget?使用
system()
?任何POSIX兼容shell都不应扩展或解释双引号变量。可能的问题:1。如果生成的shell源于
.bashrc
,则它将拾取其中的
URL
(如果存在)。2.如果使用不同的
URL
生成多个进程,其中一些进程可能会拾取错误的
URL
@PSkocik单引号阻止扩展。双引号不能。我的意思是@JohnKugelman不应该在扩展后进行扩展或解释。如何从服务器应用程序运行wget?使用
system()
?任何POSIX兼容shell都不应扩展或解释双引号变量。可能的问题:1。如果生成的shell源于
.bashrc
,则它将拾取其中的
URL
(如果存在)。2.如果使用不同的
URL
生成多个进程,其中一些进程可能会拾取错误的
URL
@PSkocik单引号阻止扩展。双引号不能。我的意思是@JohnKugelman不应该在扩展后被扩展或解释。我只是关心命令注入,所以如果我理解正确,那就好。我只是关心命令注入,所以如果我理解正确,那就好。