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");
но не смешивайте и не сочетайте.