我正处于质量保证开发人员bash脚本的过程中。它看起来像这样:
#!/bin/bash
TERM=`cat ./termName.txt` || exit $?
./other-script.sh $TERM
鉴于TERM
变量在最后一行中没有引用,感觉恶意用户可以通过操纵termName.txt
的内容来利用命令注入,但是我的基本尝试证明这是无法注入任何可执行命令。
我的问题是:
答案 0 :(得分:4)
脚本不受命令注入的影响,因为$TERM
的扩展只会在结果按字面传递给other-script.sh
之前进行分词和路径名扩展。但是,应引用,以便other-script.sh
接收TERM
的完全内容作为单个参数。
如果TERM
的值为a b
,则other-script
会收到两个参数,a
和b
,而不是一。使用"$TERM"
会传递确切的值a b
。
如果TERM
的值为*
,则确切的参数列表取决于当前工作目录的内容。使用"$TERM"
会传递确切的值*
。