2012-03-17 43 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代碼。