首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查当前Perl语句是否包含受污染的数据?

如何检查当前Perl语句是否包含受污染的数据?
EN

Stack Overflow用户
提问于 2016-01-10 11:58:34
回答 1查看 422关注 0票数 8

我编写了自己的小型Perl调试器,它为每个执行行打印当前文件名和相应的行号。如何检测当前Perl语句是否包含受污染的数据?

我知道模块Scalar中有一个函数“被污染”::Util。但是,它只接受变量名作为参数,而不是Perl语句。

我把污点附加到一个词汇变量上来追踪它。如果我能够看到一条语句是否已被污染,我只能打印那些包含受污染变量的行。这是我的自定义污点脚本:

Taint.pl

代码语言:javascript
复制
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

代码语言:javascript
复制
sub DB::DB{

    my($package, $filename, $line) = caller;

    print $filename . ":" . $line . " ";
    scalar <STDIN>;

}

1;
EN

回答 1

Stack Overflow用户

发布于 2016-08-13 09:40:07

正如在用于污染的POD文档::运行时中所描述的,有一个名为is_tainted的子,如果您将它传递给受污染的值,它将返回true,否则将返回false。

您需要更改相关的使用行以导入该函数:

use Taint::Runtime qw(taint_start taint is_tainted);

在您的示例Taint.pl脚本中,一旦完成该操作,is_tainted($data)将计算为true,is_tainted($noise)将为false,is_tainted($evil)将为true。

如果您有一个更复杂的表达式来检查污染,只需将其计算为标量,如果对该评估的任何输入被污染,则表达式和标量也将被视为污染。检查该标量是否受污染相当于检查表达式。如果表达式生成一个列表值,那么像join这样的东西就会很好地将它放入标量中,足以检测到污染。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34705088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档