我正在为 python 教程网站开发一个项目,这需要我允许用户在我的网站上执行 python 代码。为此,我在 PHP 中使用 exec 函数,代码如下
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 访问任何东西。在执行代码之前,我已经对代码进行了一些检查,例如检查是否使用了某些库,但是要检查的库太多了。我想知道是否有一种方法可以将 exec 函数沙箱化,所以如果我用户尝试使用 python 库 SYS 来做某事,它不会让他们访问我的系统?
干杯。