在一种编程语言中,我执行一个简单的shell命令
cd var; echo > create_a_file_here
与var是一个变量,其中包含一个字符串(希望)到我要在其中创建文件“ create_a_file_here”的地方的目录。现在,如果有人看到这一行代码,则可以通过分配例如来利用它:
var = "; rm -rf /"
事情可能变得很丑。避免上述情况的一种方法可能是在var中的字符串中搜索一些特殊字符,例如';'。在执行shell命令之前,但是我怀疑这是否涵盖了所有可能的漏洞利用。
有谁知道一种确保“ cd var”仅更改目录而没有其他更改的好方法?
sh
,还是使用类似的语法创建自己的编程语言,但是这种语言会扩展var
而不需要您编写cd "$var"
?或者,这是bash
用shopt -s cdable_vars
?哦,我认为您的意思是其他一些程序派生一个shell来运行这些命令。因此,只需引用var
,但请确保它本身不包含引号字符...
s='"'; echo "$s"
印刷品"
。
var=untrusted string
在父程序中执行,var
调用时已经设置的环境变量也是如此sh
。然后,您只需要在每次扩展时都引用它,就可以可靠地做到这一点。嗯,我知道这个想法已经成为Stéphane的回答的一部分>。<
var
作为参数传递。例如,调用sh
带参数-c
,'cd "$1"; echo > create_a_file_here'
,'sh'
,var
作品并不需要任何修改var
。该'sh'
参数作为传递$0
。