如何在perl中没有shell逃逸的简单管道?

时间:2014-02-06 05:00:38

标签: perl security shell

我的perl cgi程序需要将由匿名不受信任的恶意Web用户提供的任意乳胶数学表达式传递到运行mathjax以获取SVG的(可信)phantomjs脚本中。认为我想做

use Perl6::Slurp;
my $svg= slurp( my $fname, "mathjax-script.js '$not_trusted_expr' |");
在我过去编写的许多脚本中,我可以清理$ not_trusted_expr,只包含我批准的列表中的字符,但是LaTeX本身也很难表达,无法使其成为一种可行的方法。我的用户可以提供一个$ not_trusted_expr,它可以包含几乎任何东西--- incl''本身 - 并且有很好的理由。

所以,我需要绝对确定在我的字符到mathjax-script.js的过程中,没有任何方法可以解释任何shell转义字符。

我是否认为正确阅读了slurp doc

my $svg=slurp( "-|", "mathjax-script.js", $not_trusted_expr );

是解决这个问题的完整解决方案,因为这意味着永远不会调用shell?

/ IAW

1 个答案:

答案 0 :(得分:1)

是的,Perl6::Slurp::slurp包装内置open函数,... -|, $cmd, @args语法将参数直接传递给系统execvp函数(在Unixy系统上,作为{{} 1}} doc提到)。