我今天早上在一个我一直在努力的简单文件组织应用程序上遇到了这个挑战。
我没有从安全专家的角度来看这个,虽然我有预感这不太理想。我的应用程序是私有的,所以我不太担心。据我所知,问题是网络共享必须由IIS AppPool用户安装/授权。
我找到了这个例子,用于在手册页上执行系统调用 PHP系统调用 :
<?php function my_exec($cmd, $input = '') { $desc = array( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w') ); $proc = proc_open($cmd, $desc, $pipes); fwrite($pipes[0], $input); $stdout = stream_get_contents($pipes[1]); $stderr = stream_get_contents($pipes[2]); fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); $rtn = proc_close($proc); return array('stdout' => $stdout, 'stderr' => $stderr, 'return' => $rtn); } ?>
然后我能够调用它并访问共享:
my_exec('net use \\\\$MachineName\$ShareName /user:$User $Pass');
我发现,即使使用单引号,我也必须双重逃避领先\。如果您使用变量并将引号更改为double,则可能需要进行一些调整以使其正确。
请告诉我这对你有什么用,因为我有点好奇。