我编写了自己的小 Perl 调试器,它打印每个执行的行、当前文件名和相应的行号。如何检测当前的 Perl 语句是否包含受污染的数据?
我知道模块 Scalar::Util 中有一个“被污染”的函数。但是它只接受变量名作为参数,而不是 Perl 语句。
我已将 Taint 附加到一个词法变量以跟踪它。如果我能够看到一个语句是否被污染,我只能打印那些包含我被污染的变量的行。这是我的自定义污点脚本:
污点.pl
use strict;
use warnings;
use Taint::Runtime qw(taint_start taint);
taint_start();
my $data = taint("abc"); --> interesting
my $noise = "noise"; --> not interesting
my $evil = $data . " evil"; --> interesting
调试器.pl
sub DB::DB{
my($package, $filename, $line) = caller;
print $filename . ":" . $line . " ";
scalar <STDIN>;
}
1;