2016-11-10 5 views
0

Мне нужно отправить кучу строковых переменных в качестве полезных данных в сообщении HTTP POST с использованием Perl.Удалить небезопасные HTTP-символы из строки

Я хочу удалить «небезопасные» символы, такие как < > “ ‘ % ;) (& + из моей строковой переменной.

Я знаю, что я могу использовать шаблон регулярных выражений для поиска и замены каждого из этих символов, но мне интересно, существует ли какая-либо существующая библиотека Perl, которая уже делает это.

Например, я нашел Apache::Util

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

Могу ли я использовать Apache::Util::escape для этого? Или есть лучший способ?

EDIT 1: Я уже упоминал, что по небезопасным я имею в виду символы типа < > “ ‘ % ;) (& +, которые могут использоваться в SQL-инъекции. Я не знаю, как лучше описать эту проблему.

EDIT 2: Вот код, который я работаю на -it это внедренный код 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__ 

EDIT 3: Если кто-то имеет тот же вопрос, я закончил писать Perl . функция, которая ищет определенные символы, такие как «(», «{», «$», «;», и т.д., и удаляет их из предоставленного параметра строки

Список всех символов, которые я вылетающих являются: ";", "(", ")", "[", "]", "{", "}", "~", "`", "/", "<", ">", "&", "|", "'", "\"", "\\"

Очевидно, что есть место для исключений.

+1

Вы используете 'CGI'? Существует функция, аналогичная функции «A :: U :: escape_uri()». http://perldoc.perl.org/CGI.html#AUTOESCAPING-HTML – PerlDuck

+0

Я только что заметил: вы хотите *** отправить *** ваши данные уже сбежали, так что вы пишете клиентскую сторону? Если я прав, то, пожалуйста, расскажите, какие модули вы уже используете. – PerlDuck

+0

Чтобы разработать немного больше, это встроенная страница perl. Я генерирую некоторые данные в виде переменных строки perl, которые я вышлю как простой вызов POST JavaScript на этой странице EPL. Поэтому я хочу очистить свои переменные до вызова 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