Bash 在使用系统执行某些操作时,如何防止代码注入?

Bash 在使用系统执行某些操作时,如何防止代码注入?,bash,scheme,racket,code-injection,Bash,Scheme,Racket,Code Injection,我正在写一个脚本来检查Docker容器的某些内容;它是哪个容器取决于用户输入。我有这样的代码: (define pipes (process (string-append "docker inspect " name))) 要获取调用docker的结果,请在shell中检查$name。如何防止代码注入?有人可以输入someName;sudorm-rf/--no preserve root,结果不会很好。我可以使它具有docker检查“$name”的效果,甚至可以将它放在单引号之间,但在这两种情

我正在写一个脚本来检查Docker容器的某些内容;它是哪个容器取决于用户输入。我有这样的代码:

(define pipes (process (string-append "docker inspect " name)))

要获取调用docker的结果,请在shell中检查$name。如何防止代码注入?有人可以输入
someName;sudorm-rf/--no preserve root
,结果不会很好。我可以使它具有
docker检查“$name”
的效果,甚至可以将它放在单引号之间,但在这两种情况下,都可以输入
someName“
someName'
相反,问题又出现了

使用
process*
函数,该函数为命令名及其参数提供单独的参数,绕过shell运行程序

(process* "docker" "inspect" name)

我想您应该使用,它将命令名及其参数作为单独的参数。类似于
(process*“docker”“inspect”name)
?@chepner这里有点晚了,所以我明天才会测试它,但是如果这确实解决了问题(我希望它会解决,如果它只是语法上的糖,那会很奇怪),那么这将是公认的答案酷,我自己没有任何方便的方法来测试它(最后一次我写任何方案时,从PLT方案改名为Racket的时间仍然是几年后)。从我的测试来看,这似乎是安全的,请将其作为答案发布,以便我可以接受。