我想从一个 C 程序调用一个 shell 脚本,并将文件名作为参数。用户可以控制文件名。 C 类似于(省略初始化/错误检查):
sprintf(buf, "/bin/sh script.sh \"%s\"", filename);
system(buf);
目标设备实际上是一个嵌入式系统,所以我不需要担心恶意用户。显然,这将是 Web 环境中的攻击媒介。尽管如此,如果系统上有一个文件名,例如,其名称中包含反引号,该命令将失败,因为 shell 将对该名称执行扩展。有什么可以防止命令替换的吗?
最佳答案
好吧,您总是可以通过调用 fork() 然后调用 execv() 来重新实现 system()。
http://www.opengroup.org/onlinepubs/000095399/functions/system.html
关于c - 有没有办法阻止 sh/bash 执行命令替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4036731/