Как мне «развязать» переменную? - PullRequest
6 голосов
/ 03 января 2012

Насколько мне известно, после того, как переменная испорчена, Perl не разрешит использовать ее в system (), exec (), piped open, eval (), backtick или любой функции, которая влияет на что-то вне программы ( такие как unlink). Так каков процесс, чтобы его не прерывать?

Ответы [ 2 ]

12 голосов
/ 03 января 2012

Используйте регулярное выражение для испорченной переменной, чтобы вывести «безопасные» значения:

Иногда вам просто нужно очистить испорченность ваших данных.Значения могут быть незапятнанными, используя их в качестве ключей в хэше;в противном случае единственный способ обойти механизм порчи - это ссылка на подшаблоны из совпадения регулярного выражения.Perl предполагает, что если вы ссылаетесь на подстроку, используя $ 1, $ 2 и т. Д., То вы знали, что делаете, когда писали шаблон.

Не игнорируйте это предупреждение:

Это означает, что нужно немного подумать - не просто слепо отвязывать что-либо, либо вы победите весь механизм.Лучше проверить, что переменная имеет только хорошие символы (для определенных значений «хорошо»), чем проверять наличие плохих символов.Это потому, что слишком легко пропустить плохих персонажей, о которых вы никогда не задумывались.

Perlsec: отмывание и обнаружение испорченных данных

6 голосов
/ 03 января 2012

use Untaint:

ОПИСАНИЕ

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

SYNOPSIS

use Untaint;

my $pattern = qr(^k\w+);

my $foo = $ARGV[0];

# Untaint a scalar
if (is_tainted($foo)) {
        print "\$foo is tainted. Attempting to launder\n";
        $foo = untaint($pattern, $foo);
}else{
        print "\$foo is not tainted!!\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...