我使用 Perl 作为我的脚本语言并阅读 YAML 配置。文件。有一些字段(如内存地址)经常使用并且与基本字段相关。是否可以在 YAML 文件中插入锚定值并对其执行任何操作?我在 Perl 中使用 YAML::XS 作为解析器模块。
例如,在 file.cfg.yml
%YAML 1.1
---
- base: &base 10001000
- reg:
- abc: *base + 4
...
是否可以对 bin、oct 或 hex 值执行任何操作?
我使用 Perl 作为我的脚本语言并阅读 YAML 配置。文件。有一些字段(如内存地址)经常使用并且与基本字段相关。是否可以在 YAML 文件中插入锚定值并对其执行任何操作?我在 Perl 中使用 YAML::XS 作为解析器模块。
例如,在 file.cfg.yml
%YAML 1.1
---
- base: &base 10001000
- reg:
- abc: *base + 4
...
是否可以对 bin、oct 或 hex 值执行任何操作?
不,但您可以将操作序列化为代码。如果您无法控制输入,反序列化代码是一个非常愚蠢的想法。牢记 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;
}