是否可以在shell脚本中使用命令注入而不使用eval?

时间:2015-05-06 08:09:04

标签: linux bash shell security code-injection

我想知道,现在最新版本的sh,bash,ksh等可以通过执行这个(非常简单的)脚本来获取命令注入吗?

#!/bin/sh

echo "What is the name of the program you are looking for?"
read program
locate $program

尽管如果他们有shell当然可以执行代码,我只是想知道变量是否可以包含恶意代码,例如在PHP中:

parameter=parameter;ls

此问题中也可以忽略shellshock(env变量)。

2 个答案:

答案 0 :(得分:1)

是的,有可能。但它并不像你提到的那么简单。 见下面的一些例子。

它无效:

$ read -p "Type some text:" var1
Type some text:Example;hostname

$ echo $var1
Example;hostname

$ $var1
Example;hostname: command not found

但如果你这样使用,是的,它会起作用:

$ read -p "Type some text:" var1
Type some text:hostname

$ echo $var1
hostname

$ $var1
SSBLZMVM1

答案 1 :(得分:1)

如果这样写,你永远不知道是否有一个shell实现可能会被欺骗。但是,通过将locate的参数放在引号中,您可以安全地使用。然后,展开的参数将被视为单个字:

#!/bin/sh

echo "What is the name of the program you are looking for?"
read program
locate "${program}"