通过 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
这样的通用匹配表达式来去除污染。这违背了污染的目的,即确保值看起来像您在使用它之前所期望的那样。 (但这与执行去污代码的位置无关。)
当在 Perl 中清除变量时,是否必须在本地对 Perl (.pl) 文件执行所有清除操作,还是可以通过 Perl 模块 (.pm) 进行清除?
例如,清除可能看起来像这样:
$string =~ /\A(.*)\z/s
(显然,全面匹配输入的任何内容都是不好的做法,这只是一个示例)
我想知道是否可以通过 .pm 传递它,因为我想在多个 .pl 文件中针对相同的正则表达式执行。
use myModule;
$string = myModule::myUntaint($string);
其中 "myUntaint" 是包含我的正则表达式的 .pm "myModule" 中的子例程。
是的,您可以在模块中有一个子例程,该子例程采用受污染的参数和 returns 从中派生的未受污染的表达式。
但是您不应该使用像 /\A(.*)\z/s
这样的通用匹配表达式来去除污染。这违背了污染的目的,即确保值看起来像您在使用它之前所期望的那样。 (但这与执行去污代码的位置无关。)