2016-08-25 68 views
0

有没有办法在PHP中执行带有参数但没有“shell”的命令。在没有shell的情况下使用参数执行命令php

问题是exec()shell_exec()在shell中运行提供的字符串,因此任何用户输入的数据都必须转义。

有没有办法做到这一点,如:

some_exec(["command","argument","argument]) 

作为一个会做它例如Python或Java的。

我会非常能够用参数执行命令而不必转义一些参数。

我正在为一个路由器的UI工作,并通过一个命令 设置Wifi密钥,现在我必须转义字符串限制密钥可以包含的字符数。如果我在哪里不逃避关键的人可以做任何注射没有任何问题。

澄清 之所以这样,其实是在这种情况下,一个恼人的问题是,我需要执行下面的命令:

[email protected][0].key='<the password>' 

的问题是,由于密码被在设置一个字符串这个密码,$il|\|t将变成\$ile\|\\\|t现在的问题是不正确的密码是有效的。因此,存储的密码与用户输入的密码不同。

即使我们进入一个字符串密码,我们可以还是做这样' ; reboot ; '

+0

只需检查下面的链接[链接] http://php.net/manual/en/function.exec.php [/ link] – sam

回答

0

的注入我有一些麻烦了解你的需要没有逃脱争论。我试着打电话给回声一个转义字符串,回声显示原始字符串:

$cmd = 'echo'; 
$passwd = escapeshellarg('&#;`|*?~<>^()[]{}$'); 
echo 'ARG : ' . $passwd . PHP_EOL; 

exec($cmd . ' ' . $passwd, $output); 
echo 'exec : ' . $output[0] . PHP_EOL; 

echo 'passthru : '; 
passthru($cmd . ' ' . $passwd); 

echo 'shell_exec : ' . shell_exec($cmd . ' ' . $passwd); 

echo 'system : '; 
system($cmd . ' ' . $passwd); 

这里是输出:

ARG : '&#;`|*?~<>^()[]{}$' 
exec : &#;`|*?~<>^()[]{}$ 
passthru : &#;`|*?~<>^()[]{}$ 
shell_exec : &#;`|*?~<>^()[]{}$ 
system : &#;`|*?~<>^()[]{}$ 

可不可以给要执行的命令的例子吗?

+0

我需要执行此操作: uci set wireless.radio [0] ='<密码>''。如果说用户想要密码'$ ile | \ | t“'这会被转换为:'\ $ ile \ | \\\ | t'问题是,由于它在一个字符串中,密码被设置为原样。但是我仍然可以通过提供一个密码来进行注入,这个密码是''; reboot''' –

+0

$ cmd ='uci set wireless.radio [0] ='; $ passwd = escapeshellarg('$ ile | \ | t “'); $ fullCommand = $ cmd。$ passwd; 提供了以下输出:uci set wireless.radio [0] ='$ ile | \ | t“'这似乎没问题 – vincenth

相关问题