perl cgi :: param错误,在Taint模式下有单加号

时间:2013-01-11 19:36:36

标签: perl cgi param taint

我在基于Perl CGI的网站上工作。它使用Perl -T(污点模式)运行。我注意到文本输入只包含一个加号而没有别的(“+”)导致CGI :: param()给出这个错误:

在...... / CGI.pm第533行使用-T开关运行时,require中存在不安全依赖性。 BEGIN失败了 - 编译中止了。

这不适用于其他单一标志,或带有前导或尾随空白的加号(“ - ”,“+”,“?”)。

虽然用户通常不会输入单个加号作为输入,但我希望在此处有一个解决方法,以便我的脚本能够很好地拒绝输入,而不是在浏览器中打印丑陋的“软件错误”。

REQUEST_METHOD=GET QUERY_STRING='page=%2B' perl -s -T -E'
use strict;
use CGI qw( :standard  );
CGI->new();
my $page;
eval { $page = param("page"); };
print "[ $@ ]\n";

这会输出编译错误:

[在../..../CGI.pm行xxx处使用-T开关运行时,require中的不安全依赖性。 BEGIN失败了 - 编译中止了。  ]

如果我跳过CGI-> new(),则不会有错误。但根据我们的要求,这不是一个选择。

我希望这更清楚。谢谢大家的帮助!

YJ

1 个答案:

答案 0 :(得分:2)

如果您创建CGI对象,请使用它。

my $cgi = CGI->new();
my $page = $cgi->param("page");

param("page");

但不要混合搭配。