php中防止shell注入的方法
我有一个php的web应用,在其程序中要用到exec执行相应的命令,而且命令串中包含有cookie跟request提交的内容,问一下大家使用什么方法来防止防止shell注入的方法?
Kaedei
12 years ago
Answers
一般来说用户提交内容是包含在命令行参数里面的(如果连可执行文件名和路径都由用户输入决定的话那还防什么注入……)
这时候可以用escapeshellarg这个函数,它给整个参数加上引号并且escape所有需要的字符,让整个参数正确包含在一对引号中间。而escapeshellcmd只是escape了几个必要的字符(|>之类的),并不能保证参数本身也是正确的,从这个意义上来说escapeshellarg更安全一些。
http://cn.php.net/manual/zh/function....
不过从评论来看,即使用这个函数也不能完全防止一些精心设计的字符串执行shell注入。我认为如果可能的话,修改exec执行的外部程序,使用预编码的方式输入参数(如参数格式为urlencode,base64或者十六进制数)而不是直接输入字符串,这样是最安全的:
exec("myprogram.exe '".urlencode($arg1)."' '".urlencode($arg2)."'");
然后在myprogram.exe里面首先将输入的参数decode成正常的字符串。
LEVi_
answered 12 years ago