2015-09-16 4 views
0

При снятии переменных в Perl все незатухающие должны выполняться локально в файле Perl (.pl) или его можно передать через модуль Perl (.pm), чтобы освободить?Perl Untaint Variable By Passing Through Perl Module Подпрограмма

Например, untainting может выглядеть примерно так:

$string =~ /\A(.*)\z/s 

(очевидно, это плохая практика, чтобы офсетный матч-либо вход, это просто показывает пример)

Я интересно, можно ли передать его через .pm, так как я хочу выполнить против того же выражения регулярного выражения в нескольких файлах .pl.

use myModule; 

$string = myModule::myUntaint($string); 

Где "myUntaint" является подпрограммой в .pm "MyModule", который содержит мое регулярное выражение.

+2

Он никогда не должен выглядеть так: '$ string = ~/\ A (. *) \ Z/s' или' myModule :: myUntaint ($ строка); '. Он должен подтвердить значение. – ikegami

+2

Вы пробовали это? Я предполагаю, что, поскольку 'CGI :: Untaint' или' Untaint' существует, он работает. Однако по очевидным причинам - вы не должны просто одевать untaint, потому что все дело в том, чтобы гарантировать, что любой потенциально опасный ввод больше не будет. – Sobrique

+0

Спасибо за ввод. Я использовал '$ string = ~/\ A (. *) \ Z/s' как быстрый пример untainting. Очевидно, что это типичная ужасная практика одевания матчей - что угодно, когда вы не помогаете. Подпрограмма 'myUntaint()' в myModule .pm будет содержать правильное регулярное выражение для проверки значения. – SpenserAD

ответ

0

Да, вы можете иметь подпрограмму в модуле, который принимает параметр tainted и возвращает полученное из него неиспользованное выражение.

Но вы не должны использовать обобщенное выражение match-anything, подобное /\A(.*)\z/s, для разблокировки. Это побеждает цель tainting, которая заключается в том, чтобы убедиться, что значение выглядит так, как вы ожидали, прежде чем использовать его. (Но это не имеет никакого отношения к тому, где код, который делает жизнь незамысловатым.)

+0

Спасибо за ввод. Вы правы, редко (никогда) не делайте одеяло в спичечном выражении. Это было написано как быстрый пример. – SpenserAD