我使用Perl作为我的脚本语言并阅读YAML配置。文件。有一些字段(如内存地址)经常使用并且相对于基本字段。是否可以在YAML文件中插入锚定值并对其执行任何操作?我使用YAML :: XS作为Perl中的解析器模块。
例如,在file.cfg.yml
中%YAML 1.1
---
- base: &base 10001000
- reg:
- abc: *base + 4
...
是否可以对bin,oct或hex值执行任何操作?
答案 0 :(得分: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;
}