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モジュールを使用したこともありません。