2013-09-24 87 views
0

我正在为一个python教程网站的项目工作,这需要我允许用户在我的网站上执行python代码。要做到这一点。我正在使用PHP exec函数,代码如下沙箱执行功能PHP

session_start(); 


$code = str_replace("\\n", PHP_EOL, $_GET['code']); 
$code = str_replace("\\t", " ", $code); 
$filepath = "../tmp/" . $_SESSION['username'] . (string) rand() . ".py"; 

$file = fopen($filepath, "w") or die("Cant open file"); 
fwrite($file, $code); 
fclose($file); 

$output = null; 
exec("python " . $filepath, $output); 
unlink($filepath); 

foreach($output as $line) 
{ 
    echo $line; 
    echo '<br>'; 
} 

什么这个PHP脚本确实是采取用户提交的代码,将其保存到一个文件,执行该文件,它然后删除该文件。但过分这将允许用户做我们的服务器上他们想要的任何东西,他们可以通过python访问任何东西。在执行代码之前,我已经对代码进行了一些检查,例如,检查某些图书馆是否被使用,但是有很多要检查它们。我想知道是否有一种方法我可以沙箱的执行功能,所以如果我用户试图使用python库SYS做的事情,它不会让他们访问我的系统?

干杯。

+0

限制您的apache用户权限,因为使用apache用户凭证完成使用exec函数执行的命令。您也可以尝试清理文件路径以尝试删除任何“..”并在特定文件夹中启动路径,但如果做得不对,这可能很危险。 – cernunnos

回答