2016-11-10 59 views
0

我必须使用Perl在HTTP POST消息中发送一堆字符串变量作为有效内容。从字符串中删除不安全的HTTP字符

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

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

例如,我发现Apache::Util

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

我可以使用Apache::Util::escape这个?或者,还有更好的方法?

EDIT 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 。功能查找特定的字符,如“(”,“{”,“$”,“;”等,并从您提供的字符串参数删除它们

,我逃避所有字符的名单是: ";", "(", ")", "[", "]", "{", "}", "~", "`", "/", "<", ">", "&", "|", "'", "\"", "\\"

很明显,还有排除的空间。

+1

你目前使用CGI吗?有一个类似于'A :: U :: escape_uri()'的函数。 http://perldoc.perl.org/CGI.html#AUTOESCAPING-HTML – PerlDuck

+0

我刚刚注意到:你想***发送你的数据已经逃脱,所以你写客户端?如果我是对的,那么请告诉你已经使用了哪些模块。 – PerlDuck

+0

再详细一点,这是一个嵌入式Perl页面。我正在生成一些数据作为perl字符串变量,我将在该EPL页面中作为简单的JavaScript POST调用发送。所以我想在JavaScript POST调用之前清理我的变量。 – BlueChips23

回答

1

还有就是不安全字符没有通用的定义,所以它属于您确定您的任何答案是否符合您的要求

看着the source of Apache::Util它做一些非常不愉快的事情,以自己的名称空间,我不会相信它。它的目的是被用作mod_perl一个组成部分,而不应孤立地访问

我想逃避HTTP URI的规范的方法是使用URI::Escape模块

use URI::Escape 'uri_escape'; 

你必须提供数据并代码寻求更多帮助

+0

我认为这已经足够满足我的需求了,由于不安全,我已经提到过我想删除''< >''%;)(&+'',它可能会被用于SQL注入。如果''URI :: Escape'uri_escape''那么做,那么这就是我需要的。 – BlueChips23