假设我有一个 bash 脚本,它充当另一个 bash 脚本的配置文件:
配置文件:
verbose=yes
echo "Malicious code!"
name=test
Run Code Online (Sandbox Code Playgroud)
脚本.sh:
source config.sh
echo "After sourcing: verbose='$verbose', name='$name'"
Run Code Online (Sandbox Code Playgroud)
问题是,这不是很安全,因为 config.sh 中的任何内容都会运行:
$ ./script.sh
Malicious code!
After sourcing: verbose='yes', name='test'
Run Code Online (Sandbox Code Playgroud)
为了使其更安全,我想我会 grep 分配操作并只执行这些操作。我会通过传递source
一个“这里的文件”来完成:
脚本.sh:
source <<EOF
$(grep -P '^\s*\w+=' test.sh)
EOF
echo "After sourcing: verbose='$verbose', name='$name'"
Run Code Online (Sandbox Code Playgroud)
(是的,我知道正则表达式不是那么强大;它只是一个占位符。)可悲的是,源文件似乎与此处的文档不太兼容:
./script.sh: line 1: source: filename argument required
source: usage: source filename [arguments]
After sourcing: verbose='', name=''
Run Code Online (Sandbox Code Playgroud)
显然,我可以做很多事情来从文件中获取配置数据,无论如何这可能更安全。
但我仍然感到痒;我想弄清楚我尝试过的是否可行。有什么建议?