noo*_*ook 1 perl sanitization system input
我有一个Perl脚本,可以从Web表单中读取一些信息.为了做适当的卫生,我想使用这里system描述的语法.
他们建议你应该用以下形式形成系统命令,system ("cat", "/usr/stats/$username");这样username变量才会被解释为cat的参数.
如果我的命令的形式system("export REPLYTO=\"$from\"; echo \"$body\" | mail -s \"$subject\"");有多个系统命令,我该如何正确清理系统调用?
在开始之前,请注意您可以export通过设置在Perl中完成$ENV{REPLY_TO}.
您可以使用字符串:: ShellQuote的shell_quote.
use autodie qw( :all );
my $cmd = shell_quote('echo', $body) .
'|' . shell_quote('mail', '-s', $subject);
local $ENV{REPLY_TO} = $from;
system($cmd);
Run Code Online (Sandbox Code Playgroud)
通过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"');
Run Code Online (Sandbox Code Playgroud)
摆脱 echo
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |