通过 Perl 模块子程序传递 Perl Untaint 变量

Perl Untaint Variable By Passing Through Perl Module Subroutine

当在 Perl 中清除变量时,是否必须在本地对 Perl (.pl) 文件执行所有清除操作,还是可以通过 Perl 模块 (.pm) 进行清除?

例如,清除可能看起来像这样:

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

(显然,全面匹配输入的任何内容都是不好的做法,这只是一个示例)

我想知道是否可以通过 .pm 传递它,因为我想在多个 .pl 文件中针对相同的正则表达式执行。

use myModule;

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

其中 "myUntaint" 是包含我的正则表达式的 .pm "myModule" 中的子例程。

是的,您可以在模块中有一个子例程,该子例程采用受污染的参数和 returns 从中派生的未受污染的表达式。

但是您不应该使用像 /\A(.*)\z/s 这样的通用匹配表达式来去除污染。这违背了污染的目的,即确保值看起来像您在使用它之前所期望的那样。 (但这与执行去污代码的位置无关。)