Поиск источника ошибки режима perl taint

5 Matt Sheppard [2011-06-15 08:03:00]

При запуске perl CGI script в taint режиме я получаю ошибку формы...

Insecure dependency in some_function while running with -T switch at (eval some_line) line some_other_line.
Compilation failed in require at my-script.cgi line 39.
BEGIN failed--compilation aborted at my-script.cgi line 39.

my- script.cgi line 39 является оператором использования для модуля perl, который сам не использует eval или some_function, но предположительно использует другую библиотеку, которая делает. Номера строк some_line и some_other_line, похоже, не имеют смысла ни в my- script.cgi, ни в библиотеке, которая "используется" в строке 39 my- script.cgi.

Учитывая эту ошибку, как я могу отслеживать, где происходит ошибка taint?

Я пробовал установить новый обработчик сигнала die, который должен печатать трассировку стека, т.е.

$SIG{ __DIE__ } = sub { require Carp; Carp::confess(@_); };

но это, похоже, не влияет на ошибку. Возможно, это неправильный сигнал, чтобы быть ловушкой, а не слишком рано, или что-то более сложное.

perl cgi taint


2 ответа


4 daxim [2011-06-15 12:24:00]

Carp:: Always отлично работает с исключениями, вызванными проверками taint. Пример вывода:

$ perl -MCarp::Always -T blah.pl
Insecure dependency in sprintf while running with -T switch at blah.pl line 6
        main::foo() called at blah.pl line 8
        main::bar() called at blah.pl line 10

2 jmcnamara [2011-06-15 11:48:00]

Я использую Devel:: SimpleTrace в наши дни для отладки, и недавно он помог мне найти ошибку при использовании Archive:: Zip.

Однако я не знаю, работало бы это в вашем случае, поскольку он по существу устанавливает тот же обработчик sig, который вы использовали.