我在一个基于 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