Perl CGI:: Param Ошибка с одиночным знаком плюс в режиме Taint

Я работаю над сайтом на основе Perl CGI. Работает с Perl -T (режим Taint). Я заметил, что текстовый ввод содержит только знак плюс, и ничто иное ("+") не заставляет CGI::param() выдавать эту ошибку:

Небезопасная зависимость в require при работе с ключом -T в строке....../CGI.pm 533. 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";

'

Это печатает ошибку компиляции:

[Небезопасная зависимость требуется при работе с ключом -T в строке../..../CGI.pm xxx. НАЧАЛО сбой - компиляция прервана. ]

Если я пропущу CGI->new(), ошибки не будет. Но это не вариант в соответствии с нашими требованиями.

Я надеюсь, что это более понятно. Спасибо всем за помощь!

YJ

1 ответ

Решение

Если вы создаете объект CGI, используйте его.

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

или же

param("page");

но не смешивайте и не сочетайте.

Другие вопросы по тегам