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