0

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

干杯。

4

1 回答 1

0

您不想对 exec 进行沙箱化,而是对python 解释器进行沙箱化。另一种选择是使用 chroot。

于 2013-09-24T11:41:02.480 回答