如何检查当前的Perl语句是否包含污染数据?
发布时间:2020-12-15 21:57:14 所属栏目:大数据 来源:网络整理
导读:我编写了自己的小Perl调试器,为每个执行的行打印,当前文件名和相应的行号.如何检测当前的Perl语句是否包含污染数据? 我知道Scalar :: Util模块中有一个“污染”的功能.但是它只接受变量名作为参数,而不是Perl语句. 我已将Taint附加到词法变量以跟踪它. 如果
我编写了自己的小Perl调试器,为每个执行的行打印,当前文件名和相应的行号.如何检测当前的Perl语句是否包含污染数据?
我知道Scalar :: Util模块中有一个“污染”的功能.但是它只接受变量名作为参数,而不是Perl语句. 我已将Taint附加到词法变量以跟踪它. 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 Debugger.pl sub DB::DB{ my($package,$filename,$line) = caller; print $filename . ":" . $line . " "; scalar <STDIN>; } 1; 解决方法
如
POD Documentation for Taint::Runtime中所述,有一个名为is_tainted的子,如果你传递一个污染值,它将返回true,否则返回false.
您需要更改相关的使用行以导入该功能: 使用Taint :: Runtime qw(taint_start taint is_tainted); 在你的示例Taint.pl脚本中,一旦完成,is_tainted($data)将评估为true,is_tainted($noise)将为false,is_tainted($evil)将为true. 如果您有一个更复杂的表达式来检查污点,只需将其评估为标量,如果该评估的任何输入被污染,表达式和标量也将被视为污染.检查标量是否被污染等同于检查表达式.如果表达式产生一个列表值,那么像join这样的东西会使它适合一个足以检测污点的标量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |