2013-09-24 122 views
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做的事情,它不會讓他們訪問我的系統?

乾杯。

+0

限制您的apache用戶權限,因爲使用apache用戶憑證完成使用exec函數執行的命令。您也可以嘗試清理文件路徑以嘗試刪除任何「..」並在特定文件夾中啓動路徑,但如果做得不對,這可能很危險。 – cernunnos

回答