如何在构建bash命令时防止注入攻击



我正在以编程方式构建一个bash命令,该命令的一部分来自第三方。

如何确保没有办法通过这样的命令注入代码?

以下是JavaScript中构建命令的示例:

const filename = "syslog"; 
const cmd = `cat /var/log/${filename} | grep error | wc -l`;

如果文件名将包含危险内容,该怎么办?例如:

const filename = "syslog' > /dev/null && python -m SimpleHTTPServer #"

至少在bash中(我不确定其他的(,用单引号括起字符串可以确保字符串中的任何内容都不会被求值:

$ echo '/dev/${blah}n><&§è;:'
/dev/${blah}n><&§è;:
$ ls '/dev/null ; format c: :-p'
ls: cannot access '/dev/null ; format c: :-p': No such file or directory

所以,如果你事先确保字符串中没有单引号,你应该没事…

另一个更安全的想法是首先获得所有可能文件的列表
e.g。find /var/log/ -type f
并检查输入是否与其中任何一个匹配。。。

最新更新