0

Perl CGI に基づく Web サイトで作業しています。Perl -T (汚染モード) で実行されます。テキスト入力にはプラス記号だけが含まれており、それ以外 ("+") が原因で CGI::param() がこのエラーを発生させることに気付きました:

....../CGI.pm 行 533 で -T スイッチを指定して実行している場合、require の依存関係が安全ではありません。BEGIN が失敗しました -- コンパイルが中止されました。

これは、他の単一記号、または先頭または末尾に空白があるプラス記号 ("-"、" + "、"?") には適用されません。

通常、ユーザーは入力としてプラス記号を 1 つ入力することはありませんが、ブラウザに醜い「ソフトウェア エラー」を出力する代わりに、スクリプトが入力を適切に拒否するように、ここで回避策を講じたいと考えています。

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 に答える