如何强制perl变量始终被污染?

时间:2014-10-25 11:31:51

标签: perl taint

我正在寻找一个100%可靠的解决方案,不依赖于输入或环境或任何东西 - 我只想100% - 确定使标量变量受到污染: - )

1 个答案:

答案 0 :(得分:1)

我没有声称完美的可靠性。应始终创建测试以确保代码在每个新系统上按预期工作。

但是,如果您打开标量引用的文件句柄,readline的结果似乎为tainted

#!/usr/bin/env perl -T
use strict;
use warnings;

use Scalar::Util qw(tainted);

my $var = 0.13;

print tainted($var) ? "Yes, tainted: $var\n" : "Nope, all clean: $var\n";

$var = taint_string($var);

print tainted($var) ? "Yes, tainted: $var\n" : "Nope, all clean: $var\n";

sub taint_string {
    my $value = shift;

    warn "Not going to work on references" if ref $value;

    open my $fh, '<', \$value or die "Can't open: $!";
    local $/;    # Slurp
    return <$fh>;
}

输出:

Nope, all clean: 0.13
Yes, tainted: 0.13