使用perl使用多个命令进行安全系统调用

使用perl使用多个命令进行安全系统调用,perl,input,system,sanitization,Perl,Input,System,Sanitization,我有一个Perl脚本,可以从web表单读取一些信息。为了进行适当的清洁,我想使用所描述的系统语法 他们建议您应该以以下形式形成系统命令:system cat,/usr/stats/$username;因此username变量只能被解释为cat的参数 如果我有一个命令的形式是systemexport REPLYTO=\$from\;回音\$body\\邮件-s\$subject\;它有多个系统命令,如何正确清理系统调用?在开始之前,请注意,您可以通过设置$ENV{REPLY_TO}在Perl中进行

我有一个Perl脚本,可以从web表单读取一些信息。为了进行适当的清洁,我想使用所描述的系统语法

他们建议您应该以以下形式形成系统命令:system cat,/usr/stats/$username;因此username变量只能被解释为cat的参数


如果我有一个命令的形式是systemexport REPLYTO=\$from\;回音\$body\\邮件-s\$subject\;它有多个系统命令,如何正确清理系统调用?

在开始之前,请注意,您可以通过设置$ENV{REPLY_TO}在Perl中进行导出

备选案文1。 您可以使用的shell_quote

备选案文2。 通过env var传递所有内容

use autodie qw( :all );
local $ENV{REPLY_TO} = $from;
local $ENV{SUBJECT}  = $subject;
local $ENV{BODY}     = $body;
system('echo "$BODY" | mail -s "$SUBJECT"');
备选案文3。 消除回声


在开始之前,请注意,可以通过设置$ENV{REPLY_TO}在Perl中进行导出

备选案文1。 您可以使用的shell_quote

备选案文2。 通过env var传递所有内容

use autodie qw( :all );
local $ENV{REPLY_TO} = $from;
local $ENV{SUBJECT}  = $subject;
local $ENV{BODY}     = $body;
system('echo "$BODY" | mail -s "$SUBJECT"');
备选案文3。 消除回声

我会用在这类东西上,我会用在这类东西上。
use autodie qw( :all );
local $ENV{REPLY_TO} = $from;
open(my $pipe, '|-', 'mail', '-s', $subject);
print($pipe $body);
close($pipe);
die "Child died from signal ".($? & 0x7F)."\n" if $? & 0x7F;
die "Child exited from error ".($? >> 8)."\n" if $? >> 8;