gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:53:04 28 4
gpt4 key购买 nike

我编写了自己的小 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

调试器.pl
sub DB::DB{

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

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

}

1;

最佳答案

POD Documentation for Taint::Runtime 中所述有一个子叫 is_tainted如果你传递一个受污染的值,那将返回 true,否则返回 false。

您需要更改相关的使用行以导入该功能:
use Taint::Runtime qw(taint_start taint is_tainted);

在您的示例 Taint.pl 脚本中,一旦完成,is_tainted($data)将评估为真,is_tainted($noise)会是假的,is_tainted($evil)会是真的。

如果您有一个更复杂的表达式来检查污染,只需将其评估为标量,如果该评估的任何输入被污染,则表达式和标量也将被视为污染。检查该标量是否被污染等同于检查表达式。如果表达式产生一个列表值,像 join 这样的东西会将它放入一个足以检测污点的标量。

关于perl - 如何检查当前的 Perl 语句是否包含受污染的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34705088/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com