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做的事情,它不会让他们访问我的系统?
干杯。
限制您的apache用户权限,因为使用apache用户凭证完成使用exec函数执行的命令。您也可以尝试清理文件路径以尝试删除任何“..”并在特定文件夹中启动路径,但如果做得不对,这可能很危险。 – cernunnos