【发布时间】:2011-06-15 05:03:41
【问题描述】:
在污点模式下运行 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 行“使用”的库中似乎没有意义。
鉴于此错误,我如何追踪污点错误发生的位置?
我尝试设置一个新的 die 信号处理程序,它应该打印一个堆栈跟踪,即
$SIG{ __DIE__ } = sub { require Carp; Carp::confess(@_); };
但这似乎对错误没有影响。也许这是错误的信号,没有足够早地发生,或者需要更复杂的信号。
【问题讨论】:
-
通过缓慢移动 die 语句,我设法缩小问题范围,发现 CGI.pm 中的错误是我遇到的特定问题的根本原因 - nntp.perl.org/group/perl.perl5.porters/2008/01/msg133691.html I'不过,我仍然对追踪此类问题的一般方法非常感兴趣。
-
这就是为什么人们应该将 CGI.pm 用于 CGI(而不是仅仅“自己做”)。通过对数千名用户(如您)的压力测试发现、报告和修复错误。在发现问题方面也做得很好。