在一种编程语言中,我执行一个简单的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。