将文件从 file() 传递到 Perl 程序 PHP

发布于 2025-01-08 01:35:46 字数 380 浏览 1 评论 0原文

我有一个 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>;

,但它不起作用。请帮我。

I have a PHP code that stores contents of a url by file() method like

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

I need to pass these $contents to a perl program by shell_exec() method , something like following

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

My question is how to pass this $contents to Perl program. I tried like following

@file=<@ARGV>;

but its not working. Please help me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆梦 2025-01-15 01:35:46

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;

That shell_exec() code is utterly vulnerable to shell injection - you're trusting that the remote service won't include something like:

; rm -rf /

As well, file() returns the file contents as an array - you can't pass arrays over the command line directly. Only strings.

A moderately safer version is:

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

On the Perl side, you'd use

my ($contents) = @ARGV;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文