我的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
答案 0 :(得分:1)
是的,Perl6::Slurp::slurp
包装内置open
函数,... -|, $cmd, @args
语法将参数直接传递给系统execvp
函数(在Unixy系统上,作为{{} 1}} doc提到)。