使用 Data::Dumper 的 Perl Web API

发布于 2024-11-26 02:37:34 字数 435 浏览 1 评论 0原文

我们使用 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 字符串并将其转换为哈希值?

We've developed an open web API using Apache and mod_perl, where you can pass text created by Data::Dumper to make requests.

Our data generally looks like this:

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

Currently, I noticed we're using an eval to get the data back into a Perl hash server side:

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

The problem with this, is it is a major security issue. You can pass malicious perl code in there and it will run server side...

It there a better way to safely take a Data::Dumper string and turn it into a hash?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青衫负雪 2024-12-03 02:37:34

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

Yes. Use JSON::XS and use JSON rather than Data::Dumper format. That is much more compatible with other web APIs

ㄖ落Θ余辉 2024-12-03 02:37:34

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

#!/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 );

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

If your data is simple and predictable you can even try to write a simple "parser" to read back the values in a data stricture

#!/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 );

(this is just an example and wont work with integers or nested data structures)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文