我知道需要清理来自 HTML 表单的输入,但是当我清理我最近模块中的文件上传字段时,文件上传开始失败。清理所有表单输入很重要,对吧?甚至是特殊的文件上传字段?
我的表单输出代码如下所示:
use CGI;
my $cgi = new CGI;
print $cgi->header();
# ... print some HTML here
print $cgi->start_form();
print $cgi->filefield(-name=>'uploaded_file',
-size=>50,
-maxlength=>80);
print $cgi->submit(-name=>'continue',
-value=>'Continue');
print $cgi->end_form();
# ... print some more HTML here
我的清理代码看起来像这样(它实际上在与上面相同的模块中更早):
use HTML::Entities
my $OK_CHARS => 'a-zA-Z0-9 .,-_';
foreach my $param_name ( $cgi->param() ) {
my $original_content = $cgi->param($param_name);
my $replaced_content = HTML::Entities::decode( $original_content );
$replaced_content =~ s/[^$OK_CHARS]//go;
$cgi->param( $param_name, $replaced_content );
}
当我最近添加清理代码时,文件上传开始失败。文件句柄现在在这一行返回未定义:
my $uploadedFilehandle = $cgi->upload('uploaded_file');
那么我在清理代码中做错了吗?我从互联网的某个地方得到了那个代码片段,所以我并不完全理解它。我以前从未见过 'o' 正则表达式修饰符,也从未使用过 HTML::Entities 模块。