0

我使用 Perl 作为我的脚本语言并阅读 YAML 配置。文件。有一些字段(如内存地址)经常使用并且与基本字段相关。是否可以在 YAML 文件中插入锚定值并对其执行任何操作?我在 Perl 中使用 YAML::XS 作为解析器模块。

例如,在 file.cfg.yml

%YAML 1.1
---
- base: &base 10001000
- reg:
    - abc: *base + 4
...

是否可以对 bin、oct 或 hex 值执行任何操作?

4

1 回答 1

1

不,但您可以将操作序列化为代码。如果您无法控制输入,反序列化代码是一个非常愚蠢的想法。牢记 CVE-2013-0156和CVE -2013-0333

use YAML::XS qw(Dump);
$YAML::XS::UseCode = 1; # DANGER DANGER OMG WHYYYY ARE YOU DOING THIS ARE YOU NUTS OR WHAT

my $base = 10001000;
my $data = [
    {
        base => $base
    },
];
push @{ $data }, {
    reg => [
        {
            abc => sub { $data->[0]{base} + 4 },
        }
    ]
};

print Dump $d;
__END__
---
- base: 10001000
- reg:
- abc: !!perl/code |-
    {
        $$data[0]{'base'} + 4;
    }
于 2013-06-20T22:12:11.823 回答