2012-03-17 44 views
0

我想做一个插件系统,插件包含PHP代码。 我想如果有人邪恶到达上传这个插件的区域,他可以上传邪恶代码 ,所以我想限制插件文件中使用的功能,如eval()base64_encode函数上传失败。如何限制上传的PHP文件中使用的函数?

我认为这将由正则表达式完成,但我没有任何经验。

所以我想这样的事情

<?php 

$file = 'plugin.php'; 

$content = file_get_contents($file); 

if(file_is_secure($content)){ 
    upload($file); 
}else{ 
    exit('evil'); 
} 

?> 

看到这个例子

<?php 
    $content = file_get_contents('example.php'); 
    preg_match_all("/(function)(\S*\(\S*\))/", $content, $matches); 
    foreach($matches[2] as $match) { 
     $function[] = "// " . trim($match) . "<br />\n"; 
    } 
    natcasesort($function); 
    $functionlist .= "/* Functions in this file */<br />\n"; 
    $functionlist .= "/**************************/<br />\n\n"; 
    $functionlist .= implode('', $function); 
    echo $functionlist; 
?> 

我想要一个像这样的,但用于制作白名单和不使用的功能,但功能它的自我“我的意思是function();而不是function name(){}

+3

您正处于一个让用户上传'.php'文件的世界受到伤害。 – alex 2012-03-17 10:30:54

+1

这是非常危险的,你可能需要做很多工作才能保证安全。也许你可以描述你想让用户做什么类型的事情,我们可以提供一个不同的解决方案? – Lix 2012-03-17 10:32:13

+0

插件是有限的,这意味着我可以限制使用的功能,因为我想 – 2012-03-17 10:33:31

回答

4

看一看PHP的runkit扩展名,它允许您删除或重新定义PHP函数,并在沙箱环境中执行PHP代码。