动态插件函数执行,允许加载的文件和函数执行它想要的任何东西,但是它只能接受和返回可以json_encode
'ed 的变量。
function proxyExternalFunction($fileName, $functionName, $args, $setupStatements = '') {
$output = array();
$command = $setupStatements.";include('".addslashes($fileName)."');echo json_encode(".$functionName."(";
foreach ($args as $arg) {
$command .= "json_decode('".json_encode($arg)."',true),";
}
if (count($args) > 0) {
$command[strlen($command)-1] = ")";//end of $functionName
}
$command .= ");";//end of json_encode
$command = "php -r ".escapeshellarg($command);
exec($command, $output);
$output = json_decode($output,true);
}
外部代码是完全沙盒的,您可以通过执行应用任何您想要的权限限制sudo -u restricedUser php -r ...
。