我在基于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
答案 0 :(得分:2)
如果您创建CGI对象,请使用它。
my $cgi = CGI->new();
my $page = $cgi->param("page");
或
param("page");
但不要混合搭配。