php中防止shell注入的方法

一般来说用户提交内容是包含在命令行参数里面的(如果连可执行文件名和路径都由用户输入决定的话那还防什么注入……)
这时候可以用escapeshellarg这个函数,它给整个参数加上引号并且escape所有需要的字符,让整个参数正确包含在一对引号中间。而escapeshellcmd只是escape了几个必要的字符(|>之类的),并不能保证参数本身也是正确的,从这个意义上来说escapeshellarg更安全一些。
http://cn.php.net/manual/zh/function.escapeshellarg.php

不过从评论来看,即使用这个函数也不能完全防止一些精心设计的字符串执行shell注入。我认为如果可能的话,修改exec执行的外部程序,使用预编码的方式输入参数(如参数格式为urlencode,base64或者十六进制数)而不是直接输入字符串,这样是最安全的:
exec("myprogram.exe '".urlencode($arg1)."' '".urlencode($arg2)."'");
然后在myprogram.exe里面首先将输入的参数decode成正常的字符串。

 

转自http://www.dewen.org/q/5371/?utm_source=weekly_15671321_23&utm_field=5&utm_id=7

你可能感兴趣的:(PHP,shell)