从字符串中删除不安全的 HTTP 字符
Remove unsafe HTTP characters from a string
我必须使用 Perl 在 HTTP POST 消息中发送一堆字符串变量作为有效负载。
我想从我的字符串变量中删除 "unsafe" 个字符,例如 < > “ ‘ % ; ) ( & +
。
我知道我可以使用正则表达式模式来查找和替换这些字符中的每一个,但我想知道是否有任何现有的 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 函数来查找某些字符,例如“(”、“{”、“$ "、";" 等并将它们从您提供的字符串参数中删除。
我要转义的所有字符列表是:
";", "(", ")", "[", "]", "{", "}", "~", "`", "/", "<", ">", "&", "|", "'", "\"", "\"
显然,也有排除的余地。
没有不安全字符的一般定义,因此您需要确定您的任何答案是否满足您的要求
看着 the source of Apache::Util
它对自己的名字 space 做了一些非常不愉快的事情,我不相信它。它旨在用作 mod_perl
的组件,不应单独访问
我认为转义 HTTP URI 的规范方法是使用 URI::Escape
模块
use URI::Escape 'uri_escape';
您必须提供数据和代码以获得比这更多的帮助
我必须使用 Perl 在 HTTP POST 消息中发送一堆字符串变量作为有效负载。
我想从我的字符串变量中删除 "unsafe" 个字符,例如 < > “ ‘ % ; ) ( & +
。
我知道我可以使用正则表达式模式来查找和替换这些字符中的每一个,但我想知道是否有任何现有的 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 函数来查找某些字符,例如“(”、“{”、“$ "、";" 等并将它们从您提供的字符串参数中删除。
我要转义的所有字符列表是:
";", "(", ")", "[", "]", "{", "}", "~", "`", "/", "<", ">", "&", "|", "'", "\"", "\"
显然,也有排除的余地。
没有不安全字符的一般定义,因此您需要确定您的任何答案是否满足您的要求
看着 the source of Apache::Util
它对自己的名字 space 做了一些非常不愉快的事情,我不相信它。它旨在用作 mod_perl
的组件,不应单独访问
我认为转义 HTTP URI 的规范方法是使用 URI::Escape
模块
use URI::Escape 'uri_escape';
您必须提供数据和代码以获得比这更多的帮助