BlueChips23 BlueChips23 - 3 months ago 29
Perl Question

Remove unsafe HTTP characters from a string

I have to send a bunch of string variables as payloads in a HTTP POST message using Perl.

I want to remove "unsafe" characters, such as

< > “ ‘ % ; ) ( & +
from my string variable.

I know I can use a regex pattern to find and replace each of these characters, but I am wondering if there's any existing Perl library that already does that.

For example, I found

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

Can I use
for this? Or is there a better way?

EDIT 1: I have already mentioned that by unsafe, I mean characters like
< > “ ‘ % ; ) ( & +
which can be used in SQL-injection. I don't know how to describe this problem better.

EDIT 2: Here's the code that I am working on -it's an Embedded perl code:

$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> ({
'paramA': '$param1',
'paramB': '$param2',
'paramC': '$param3'

EDIT 3: If anyone else has the same question, I ended up writing a perl function that looks for certain characters such as "(", "{", "$", ";", etc and removes them from your provided string parameter.

List of all characters that I am escaping are:
";", "(", ")", "[", "]", "{", "}", "~", "`", "/", "<", ">", "&", "|", "'", "\"", "\\"

Obviously, there's room for exclusions as well.


There is no general definition of unsafe characters, so it falls to you to determine whether any of your answers fulfill your requirement

Looking at the source of Apache::Util it does some very unpleasant things to its own name space, and I wouldn't trust it. It is intended to be used as a component of mod_perl, and shouldn't be accessed in isolation

I think the canonical way of escaping HTTP URIs is to use the URI::Escape module

use URI::Escape 'uri_escape';

You must provide data and code for any more help than this