据我所知,一旦变量被污染,Perl将不允许在system(),exec(),管道打开,eval(),反引号命令或任何影响程序之外的东西的函数中使用它(例如unlink ).那么解开它的过程是什么?
Øyv*_*aar 12
在受污染的变量上使用正则表达式来提取"安全"值:
有时您只需要清除数据的污点.通过将它们用作散列中的键,可能无法使用值; 否则绕过污点机制的唯一方法是从正则表达式匹配引用子模式.Perl假设如果你使用$ 1,$ 2等引用子字符串,那么你就知道在编写模式时你在做什么.
不要忽略此警告:
这意味着使用一点思考 - 不要盲目地解开任何事情,或者你打败整个机制.最好验证变量只有好字符(对于某些"好"值),而不是检查它是否有任何坏字符.那是因为很容易错过你从未想过的坏人物.
描述
该模块用于清洗因使用
-T
开关处于污点模式而受污染的数据.这可以用于CGI脚本以及命令行脚本.该模块将取消标记标量,数组和散列.在清洗数组时,只会清洗被污染的数组元素.概要
Run Code Online (Sandbox Code Playgroud)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"; }