使用Data :: Dumper的Perl Web API

时间:2011-07-21 13:28:53

标签: web-services perl mod-perl data-dumper

我们使用Apache和mod_perl开发了一个开放的Web API,您可以在其中传递Data :: Dumper创建的文本来发出请求。

我们的数据通常如下所示:

$VAR1 = {
    'OurField' => 'OurValue'
};

目前,我注意到我们正在使用eval将数据恢复到Perl哈希服务器端:

my $VAR1;
eval $our_dumper_string;
#$VAR1 is now filled with hash value

这个问题,是一个重大的安全问题。您可以在那里传递恶意perl代码,它将运行服务器端...

有一种更好的方法可以安全地获取Data :: Dumper字符串并将其转换为哈希值吗?

2 个答案:

答案 0 :(得分:7)

是。使用JSON :: XS并使用JSON而不是Data :: Dumper格式。这与其他Web API更加兼容

答案 1 :(得分:0)

如果您的数据简单且可预测,您甚至可以尝试编写一个简单的“解析器”来回读数据限制中的值

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my $data = { 'key1' => 'value' };

my $dumper = Dumper($data);

print $dumper;

my $data_2;

while( $dumper =~ /(.+)$/mg) {
    if ( $1 =~ m/'(.*)' => '(.*)'/ ) {
        $data_2->{$1} = $2;
    }
}

print Dumper( $data_2 );

(这只是一个例子,不适用于整数或嵌套数据结构)