通过环境变量传递参数,它是完全安全的吗?

时间:2016-11-29 21:57:40

标签: bash environment-variables sh command-line-arguments sanitization

我需要从服务器应用程序调用{​​{1}},其中部分网址由用户控制。如果我在服务器应用程序中使用wget将参数存储在环境变量URL中,那么在forked shell中执行

setenv()

我可以假设wget somehost/"$URL" 没有以任何方式扩展,它被完全解释为网址的一部分吗?这是否与Bourne shell兼容(例如,$URL而不是sh,例如Ubuntu)?

1 个答案:

答案 0 :(得分:0)

shell将在$URL命令调用(forks / execs)之前执行wget的参数扩展。由于您的参数是双引号,因此不执行任何分词,“somehost /任何URL扩展为”将是一个参数。

ps(1)输出中的其他用户可以看到结果为命令加args。

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

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