1

次のようなfile()メソッドでURLの内容を保存するPHPコードがあります

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

これらの $contents を shell_exec() メソッドで perl プログラムに渡す必要があります。

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

私の質問は、この $contents を Perl プログラムに渡す方法です。私は次のように試しました

@file=<@ARGV>;

しかし、それは機能していません。私を助けてください。

4

1 に答える 1

3

そのshell_exec()コードは、シェルインジェクションに対して完全に脆弱です。リモートサービスに次のようなものが含まれないことを信頼しています。

; rm -rf /

同様にfile()、ファイルの内容を配列として返します。コマンドラインから直接配列を渡すことはできません。文字列のみ。

適度に安全なバージョンは次のとおりです。

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

Perl側では、

my ($contents) = @ARGV;
于 2012-02-21T15:50:32.997 に答える