1

我有一个 PHP 代码,它通过 file() 方法存储 url 的内容,例如

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

我需要通过 shell_exec() 方法将这些 $contents 传递给 perl 程序,如下所示

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

我的问题是如何将此 $contents 传递给 Perl 程序。我试过如下

@file=<@ARGV>;

但它不工作。请帮我。

4

1 回答 1

3

该 shell_exec() 代码完全容易受到 shell 注入的影响——您相信远程服务不会包含以下内容:

; 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 回答