2012-02-21 1 views
1

내가 파일하여 URL의 내용을 저장하는 PHP 코드가() 메소드와 같은패스 파일

$contents=file("http://www.rcsb.org/pdb/files/2AID.pdb"); 

나는이 $를 통과해야 shell_exec에 의해 펄 프로그램 내용() 메소드, 다음과 같은 것

$result=shell_exec("perl_prog.pl $contents"); 

제 질문은이 $ 내용을 Perl 프로그램에 전달하는 방법입니다. 나는 다음과 같이 시도했다.

@file=<@ARGV>; 

그러나 작동하지 않는다. 도와주세요. 원격 서비스가 같은 것을 포함하지 않을 것이라는 신뢰하고 -

답변

3

그 shell_exec() 코드를 주입 ​​쉘 완전히 취약 :뿐만 아니라

; rm -rf/

는, file() 배열로 파일의 내용을 반환합니다 - 배열을 명령 행으로 직접 전달할 수는 없습니다. 문자열 만.

적당히 안전한 버전입니다 : 펄 측면에서

$contents = file_get_contents('http://etc....'); 
$safe_contents = escapeshellarg($contents); 
$result = shell_exec('perl_prog.pl $safe_contents'); 

, 당신은 일 펄 구문이 될 shud

my ($contents) = @ARGV; 
+0

와트를 사용하는 거라고? – gthm

+0

문서에 따르면, ['escapeshellarg'] (http://php.net/manual/en/function.escapeshellarg.php)에 이미 따옴표가 추가되어 있습니다. 결정된. – ikegami

+0

@gthm geeky, Perl 쪽 노드에 대한 코드 추가. – ikegami