2013-09-24 4 views
0

나는 파이썬 튜토리얼 웹 사이트 프로젝트를 진행 중이며, 사용자가 내 웹 사이트에서 파이썬 코드를 실행할 수 있도록 허용하고있다. 내가 PHP의 간부 인 기능을 사용하고이 작업을 수행하려면 코드는 다음과 같습니다exec 함수 Sandboxboxing 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 스크립트가 수행하는 것은, 사용자가 제출 한 코드을 파일에 저장 파일을 실행하고 그 다음 삭제입니다 그 파일. 지나치게 사용자가 파이썬을 통해 무엇이든 액세스 할 수있는 내 서버에서 원하는 것을 할 수있게 해줍니다. 예를 들어 실행되기 전에 코드 검사를 구현했습니다. 특정 라이브러리가 사용되었는지 확인하지만 많은 라이브러리가 해당 라이브러리를 모두 확인해야합니다. 만약 내가 사용자가 파이썬 라이브러리 SYS를 사용하여 뭔가를하려고한다면 exec 시스템을 샌드 박스로 만들 수있는 방법이 있는지 궁금 해서요. 시스템에 접근하지 못하게할까요?

건배.

+0

apache 사용자 자격 증명을 사용하여 exec 함수로 실행되는 명령이 수행되므로 apache 사용자 권한을 제한하십시오. 또한 ".."를 제거하고 특정 폴더에서 경로를 시작하려고 파일 경로를 삭제하려고 시도 할 수도 있지만, 올바르게 수행하지 않으면 위험 할 수 있습니다. – cernunnos

답변

0

exec를 샌드 박스하지 않고 python interpreter입니다. 또 다른 옵션은 chroot를 사용하는 것입니다.