2012-04-05 2 views
3

나는 tryruby.org와 (과) 비슷한 것을 만들고 싶습니다. 사용자 (예 : echo __FILE__)에게 전화를 걸고 PHP로 실행하고 출력을 클라이언트에 반환하고 싶습니다.인라인 PHP (명령 줄)

나는 exec('php -r ' . $command, $output)을 시도했지만 $output에는 항상 PHP 도움말 섹션이 포함되어 있습니다.

아무도 나를 도울 수 없으며이 기능을 구현하는 방법에 대해 조언을 제공 할 수 있습니까?

많은 Thx.

+0

'exec ("php -r \"$ command \ "", $ output)'시도해보십시오. 어쨌든 너무 위험한 make 사용자는 컴퓨터에서 명령어를 실행할 수있다. – safarov

+0

'eval' http://php.net/manual/en/function.eval.php를 살펴 보라. 거기에있는 사용자. 미리 크게 필터링해야합니다. – Nick

+2

더 나은 점은 ['Runkit_Sandbox'] (http://de2.php.net/manual/en/runkit.sandbox.php)를보십시오. – vstm

답변

5

' '으로 실행 코드를 래핑하지 않는 것이 문제인 것처럼 보입니다. 코드, 특수 문자, 이스케이프 시퀀스 등에서 '을주의해야합니다.

실제로 exec()을 사용하고 싶다면 이스케이프 걱정을 완전히 피하려면 등) 등 : 대신 위의 게시하는지의

$command = base64_encode($command); 
exec("php -r 'eval(base64_decode(\"$command\"));'", $output); 

당신 사용 eval().

주요 문제가 여기 (모두 eval()하고 exec() 코드)는 사용자 입력 에서 PHP 코드를 복용하는 것은 단순히 안전되지 않는 것입니다 :

평가 후면() 언어 구조는 매우 위험합니다입니다. 임의의 PHP 코드를 실행할 수 있기 때문입니다.그 사용은 권장하지 않습니다. 주의 깊게이 구조를 사용하는 것보다 다른 옵션이 있다는 것을 확인하는 경우은 제대로 사전 검증없이 사용자가 제공 한 데이터 그것에을 통과하지 특별한주의를 을 지불합니다.


제안

당신이 PHP 코드의 결과를 반환 할 때문에, 당신은 잠재적으로 당신이 (스크립트에 기본 인코딩 (64) PHP 코드를 통과 AJAX, 멋진 일을 할 수있는, 아마도) 파라미터로서 :

$code = base64_decode($_GET['code']); 
// clean the user input here 
eval($code); 

AJAX 예 jQuery를 사용 :

// assuming `code` contains the PHP code 
var encoded = base64_enc(code); 

$.get('execute.php?code=' + encoded, function(data) { 
    var result = new String(data); 
    // do something with the result here, such as displaying it 
}, dataType='text'); 
01,235,

JavaScript의 기본 64 인코딩 인 경우 see this.

0

'eval()'을 찾아보십시오. 더 중요한 것은 eval()과 수행하려는 작업이 안전한 방식으로 달성하기가 매우 어렵다는 것입니다. 이미징 예를 들어 사용자가 입력 자 :

echo file_get_contents('/etc/passwd'); 

당신이, 보안을 포함하여 관찰을하고 모든 시스템을 필터링하는 것은 eval'd 과정에서 만들어지고 호출 작업이 꽤 필요합니다.

건배

7

당신이 ' .. 코드 사이에 실행하고자하는 코드를 삽입해야 할 php -r을 만들려면 ... '

예 :

php -r ' $var = 34; print_r($var); ' 
0

http://tryruby.org는이 보인다 대화 형 루비 셸. 그것은 좋은 출발점 인 것 같습니다.

다음은 PHP 용 쉘을 제공하는 두 가지 프로젝트입니다 (php_replphpsh).

다른 부분은 대화 형 셸의 웹 인터페이스입니다. 그 부분에 대해서는 repl.it을 보시면 많은 언어 (그러나 슬프게도 PHP가 아닙니다)에서이 서비스를 제공합니다. Here's a link이 소스 코드입니다.

이 조합을 사용하면 코스 프로젝트를 완료 할 수 있습니다.

관련 문제