我正在使用PHP生成一个shell命令,然后我将其传递给PHP的exec()
函数。我正在广泛使用escapeshellarg()
来确保没有任何安全问题,并确保某些Linux shell属性和运算符正在应用于正确的位置(如流重定向)。
所以这是我的问题的一般例子:
我正在嵌套escapeshellarg()
三次,如下:
echo "first_program -f " . escapeshellarg("second_program -f ". escapeshellarg("third_program -f " . escapeshellarg("value")));
这个输出是:
first_program -f 'second_program -f '\''third_program -f '\''\'\'''\''value'\''\'\'''\'''\'''
正如您所看到的,一旦它进入第三个escapeshellarg()
函数调用,它就会因转义字符而变得疯狂。
当exec()
函数执行此操作时,它没有正确地取消,因此无法正确执行。
我错过了什么吗?或者escapeshellarg()
函数是否会像这样嵌套?它只能嵌套两次,但是在第三次嵌套时它会发疯。我应该在某些地方使用escapeshellcmd()
吗?我将所有这些作为参数传递给我,所以我不明白为什么我不会使用escapeshellarg()
。