2011-07-21 104 views
1

我們使用Apache和mod_perl開發了一個開放的Web API,您可以在其中傳遞由Data :: Dumper創建的文本以發出請求。使用Data :: Dumper的Perl web API

我們的數據一般是這樣的:

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

目前,我注意到我們使用的eval來取回數據到Perl hash服務器端:

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

的問題這是否是一個重大的安全問題。你可以通過惡意的Perl代碼在那裏,它會運行服務器端...

它有一個更好的方式來安全地採取一個Data :: Dumper字符串,並將其變成一個哈希?

回答

7

是的。使用JSON :: XS並使用JSON而不是Data :: Dumper格式。這是更兼容其他網絡的API

+0

我們還支持XML,YAML和JSON。這只是我們的perl開發人員目前使用的第四種格式。我們想繼續支持它,B/C目前正在使用... – jonathanpeppers

+1

好的,我正在觸摸突然,我猜想這可能是一個問題。但是,還有其他問題。首先,你不能真正控制核心模塊的功能,所以它們可以改變,除了與eval兼容。 CPAN安全模塊可能是您最好的選擇,可以對eval進行隔離,以便執行一些代碼。這將使Data :: Dumper完好無損,但解決了安全問題。 –

+0

我們將嘗試使用Safe,我認爲它看起來是一個不錯的選擇。 – jonathanpeppers

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); 

讀回值(這是隻是一個例子,不會與整數或嵌套數據結構一起工作)

相關問題