@Leytenant

Как убрать запись Perl warnings в лог ошибок Apache?

У меня в лог ошибок пишутся не только ошибки, а еще и предупреждения.
Операционная система: Debian GNU/Linux 10 (buster)
Директира LogLevel error не помогает.
В скрипте перл вначале: no warnings;

примеры записи в логе ошибок

[Sun Nov 17 13:22:14.775837 2024] [cgi:error] [pid 32647] [client 91.224.207.215:32786] AH01215: Use of uninitialized value in string ne at /var/www/domain/data/www/domain.ru/cgi-bin/administration/engine.pl line 71.: /var/www/domain/data/www/domain.ru/cgi-bin/administration/engine.pl, referer: https://www.domain.ru/cgi-bin/administration/index.pl

[Sun Nov 17 11:37:29.507630 2024] [cgi:error] [pid 8493] [client 16.138.42.254:59274] AH01215: [Sun Nov 17 11:37:29 2024] script.pl: CGI::param called in list context from /var/www/domain/data/www/domain.ru/cgi-bin/administration/script.pl line 403, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/share/perl5/CGI.pm line 412.: /var/www/domain/data/www/domain.ru/cgi-bin/administration/script.pl, referer: https://www.domain.ru/cgi-bin/administration/scrip...
  • Вопрос задан
  • 34 просмотра
Пригласить эксперта
Ответы на вопрос 2
У вас тут как раз error.
Ответ написан
Комментировать
@GermanS
Если быстро, то следует установить
$CGI::LIST_CONTEXT_WARN = 0
https://metacpan.org/dist/CGI/view/lib/CGI.pod

Такой ворнинг возникает когда в запросе передается несколько значений для одного параметра, т.е.
/service?foo=1&foo=2

Если такой запрос вполне допустимый, то следует использовать конструкцию
my @values = $query -> param( 'foo' );
и обрабатывать и обрабатывать именно массив значений

ну или еще возможный вариант с исправлением
my ( $value ) = $query -> param( 'foo' );

Первый ворнинго в 71 строке можно приблизительно так поправить
my $foo = $query -> param( 'foo' );
if( $foo && ( $foo ne ''something' ) { ... }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы