0

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

在 ....../CGI.pm 第 533 行使用 -T 开关运行时,require 中的依赖关系不安全。BEGIN failed - 编译中止。

这不适用于其他单号或带有前导或尾随空格的加号(“-”、“+”、“?”)。

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

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

4

1 回答 1

2

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

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

或者

param("page");

但不要混搭。

于 2013-01-11T23:44:45.140 回答