沙盒执行函数 PHP


Sandboxing the exec function PHP

我正在为一个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 做某事,它不会让他们访问我的系统?

干杯。

你不想沙盒化exec,而是Python解释器。另一种选择是使用 chroot。