2013-06-20 2 views
0

필자는 스크립트 언어로 Perl을 사용하고 YAML 설정을 읽습니다. 파일. 자주 사용되며 기본 필드를 기준으로하는 몇 가지 필드 (예 : 메모리 주소)가 있습니다. YAML 파일 내에서 앵커 된 값을 보간하고 임의의 연산을 수행 할 수 있습니까? 나는 YAML :: XS를 Perl의 파서 모듈로 사용하고있다. file.cfg.ymlYAML에서 보간

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

예를 들면

, 그것은 10 월 또는 16 진수 값을 빈에 대한 작업을 수행 할 수 있는가?

답변

1

아니요,하지만 작업을 코드로 serialize 할 수 있습니다. deserialising 코드는 입력을 제어 할 수 없다면 정말 어리석은 생각입니다. CVE-2013-0156CVE-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; 
    } 
+0

반대로 할 수 있습니까? 파일에서 어떤 식 으로든 그것을 정의하고 코드에서'eval'을 정의 할 수 있습니까? – Wilderness