找到perl污点模式错误的来源

时间:2011-06-15 05:03:42

标签: perl cgi taint

在污染模式下运行perl CGI脚本时,我收到表单错误

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第39行是perl模块的use语句,它本身不使用eval或some_function,但可能使用另一个库。 some_line和some_other_line行号在my-script.cgi或my-script.cgi第39行使用的库中似乎没有意义。

鉴于此错误,我如何追踪出现污点错误的位置?

我已经尝试设置一个新的芯片信号处理程序,它应该打印一个堆栈跟踪,即

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

但这似乎对错误没有影响。也许这是错误的诱捕信号,没有及早发生,或者需要更复杂的东西。

2 个答案:

答案 0 :(得分:4)

Carp::Always适用于污点检查引发的异常。示例输出:

$ 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

答案 1 :(得分:2)

这些天我经常使用Devel::SimpleTrace进行调试,最近帮助我在使用Archive :: Zip时找到了一个污点。

但是,我不知道它是否适用于您的情况,因为它实际上是设置了您使用的相同sig处理程序。