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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值