【发布时间】:2017-02-20 12:06:54
【问题描述】:
在研究从配置文件中(安全地)加载分配的方法的过程中,我试图提出一个 shell 函数:
- 将任意字符串作为第一个参数接收,应用安全扩展(即变量扩展、
${}扩展...)但阻止任何不安全的扩展(包括嵌套在其他结构中的情况)。 - 将结果分配给作为第二个参数接收的变量名(对于这个问题,可以假定变量名是安全的)
- 最好是纯 shell(特定于 Bash 对我来说是可以的),但是如果使用外部命令的建议可以提供更好的结果、不会过多降低性能并且依赖于基本安装中通常存在的实用程序,那么它是可以的类 UNIX 操作系统。
- 执行扩展,同时去掉“第一级”引号,就像 shell 一样。
这是一个示例(假设函数 safeval 满足上述要求,并且已经在当前上下文中加载):
export A=1
safeval '$A$(ls /)' B
echo "$B" # Echoes 1$(ls /)
safeval '"a""b"' C
echo "$C" # Echoes ab
【问题讨论】:
-
除了接受第二个参数 - 这很容易添加 - this 我的答案,我们 previously discussed 满足您的要求(除了您想考虑替换
tr调用带有外壳参数扩展)。 -
@123 我认为采购不符合我的安全要求。
-
@mklement0 我将根据您上面的答案提供一个答案,但这并不完全相同。请多多包涵。
-
听起来不错,但请在您的问题中添加任何其他要求。
-
@mklement 顺便说一句,在你之前的回答中尽量避免
tr是我尽可能避免的一件事。
标签: bash shell eval code-injection