从字符串

时间:2016-11-10 18:53:51

标签: perl escaping perl-module

我必须使用Perl在HTTP POST消息中将一堆字符串变量作为有效负载发送。

我想删除&#34;不安全&#34;字符,例如我的字符串变量中的< > “ ‘ % ; ) ( & +

我知道我可以使用正则表达式模式来查找和替换每个字符,但我想知道是否有任何现有的Perl库已经这样做了。

例如,我找到了Apache::Util

my $esc = Apache::Util::escape_uri($uri);

我可以使用Apache::Util::escape吗?或者有更好的方法吗?

编辑1:我已经提到过,不安全,我指的是< > “ ‘ % ; ) ( & +这样的字符,可以在SQL注入中使用。我不知道如何更好地描述这个问题。

编辑2:以下是我正在处理的代码 - 这是一个嵌入式perl代码:

$cgi = CGI->new();
my $param1 = $cgi->param('param1');
my $param2 = $cgi->param('param2');
my $param3 = $cgi->param('param3');

# I want to remove unsafe characters (< > “ ‘ % ; ) ( & +) from $param1, $param2 and $param3
# Q is, do I use Apache::Util::escape_uri; even if that's for removing unsafe chars from URI?
# OR do I use URI::Escape 'uri_escape';? 
$script = <<__HTML__;
    <script>
       API.call ({
            'paramA': '$param1',
            'paramB': '$param2',
            'paramC': '$param3'
        });
    </script>
__HTML__

编辑3:如果其他人有相同的问题,我最终编写了一个perl函数,用于查找某些字符,例如&#34;(&#34;,&#34; { &#34;,&#34; $&#34;,&#34;;&#34;等,并从提供的字符串参数中删除它们。

我要逃避的所有角色的列表是: ";", "(", ")", "[", "]", "{", "}", "~", "`", "/", "<", ">", "&", "|", "'", "\"", "\\"

显然,也有排除的空间。

1 个答案:

答案 0 :(得分:1)

不安全字符没有一般定义,因此您需要确定是否有任何答案符合您的要求

the source of Apache::Util它会给自己的名字空间带来一些非常不愉快的事情,我不会相信它。它旨在用作mod_perl的组件,不应单独访问

我认为转义HTTP URI的规范方法是使用URI::Escape模块

use URI::Escape 'uri_escape';

除了此

之外,您必须提供更多帮助的数据和代码