我的 bash 脚本容易受到命令注入的攻击吗?
Is my bash script vulnerable to command injection?
我正在对开发人员 bash 脚本进行 QA。它看起来像这样:
#!/bin/bash
TERM=`cat ./termName.txt` || exit $?
./other-script.sh $TERM
鉴于最后一行没有引用 TERM
变量,感觉恶意用户可以通过操纵 termName.txt
的内容来利用命令注入,但是我的基本尝试证明这是无法注入任何可执行命令。
我的问题是:
- 此脚本容易受到命令注入的攻击吗?
- 如果是,能否举例说明如何执行任意命令。如果不是,您能解释一下为什么它可以避免命令注入吗?
该脚本不受命令注入的影响,因为 $TERM
的扩展仅在结果按字面意义传递给 other-script.sh
之前进行分词和路径名扩展。但是,它 应该 被引用,以便 other-script.sh
接收 TERM
的 精确 内容作为单个参数。
如果 TERM
的值为 a b
,则 other-script
将收到 两个 个参数,a
和 b
,而不是一个。使用 "$TERM"
传递精确值 a b
.
如果 TERM
的值为 *
,参数的确切列表取决于当前工作目录的内容。使用 "$TERM"
传递精确值 *
.
我正在对开发人员 bash 脚本进行 QA。它看起来像这样:
#!/bin/bash
TERM=`cat ./termName.txt` || exit $?
./other-script.sh $TERM
鉴于最后一行没有引用 TERM
变量,感觉恶意用户可以通过操纵 termName.txt
的内容来利用命令注入,但是我的基本尝试证明这是无法注入任何可执行命令。
我的问题是:
- 此脚本容易受到命令注入的攻击吗?
- 如果是,能否举例说明如何执行任意命令。如果不是,您能解释一下为什么它可以避免命令注入吗?
该脚本不受命令注入的影响,因为 $TERM
的扩展仅在结果按字面意义传递给 other-script.sh
之前进行分词和路径名扩展。但是,它 应该 被引用,以便 other-script.sh
接收 TERM
的 精确 内容作为单个参数。
如果 TERM
的值为 a b
,则 other-script
将收到 两个 个参数,a
和 b
,而不是一个。使用 "$TERM"
传递精确值 a b
.
如果 TERM
的值为 *
,参数的确切列表取决于当前工作目录的内容。使用 "$TERM"
传递精确值 *
.