2011-07-14 22 views
0

私は、ユーザーがzipファイルをアップロードできるWebサーバーで作業しています。アップロード後、ファイルを解凍する必要があります。私はシステムコマンドunzipとArchive::Extractモジュールを試しました。私はまだエラーが表示されます:perl cgiアップロードされたファイルを解凍する

Insecure dependency in eval while running with -T switch at /usr/lib/perl5/5.10.0/Module/Load/Conditional.pm line 332, <GEN3> line 34 

助けてください。

+2

あなたのコードは? – marto

+0

試聴アーカイブ:: Zip –

答えて

0

は、私はそう全部がシェルコードインジェクションのための招待状(ファイル名のブラウザで「bla.zip; RM -fr *」)であるあなたは

system "unzip $value_from_browser"; 

ような何かをやっていると思い

使用してシェルを回避multiargument構文は、:Archive::zipを使用する

system 'unzip', $value_from_browser; 
0

安全な方法があるかもしれない、ここに私の作業コードのいくつかは、それはあなたにそれを行う方法の要点を与えるべきです。 Archive::zipモジュールにもいくつかの情報があります。

sub unpack_zipfiles 
{ 
my $zipfile = shift; # Name of uploaded zip file 
my $zip = Archive::Zip->new(); 
my $status = $zip->read($zipfile); 
if ($status == AZ_OK) 
    { 
    my @members = $zip->memberNames(); 
    my $n = 1; 
    foreach my $f (@members) 
     { 
     my @f2 = split(/\//,$f); 
# Part 1 - get a filename, and save the file 
     my $zf = getNextFile($f2[$#f2]); 
     my $unzipped = qq{$unpack_dir/$zf}; 
     $zip->extractMemberWithoutPaths($f,$unzipped); 
# Part 2 - check if it's new or the same, and adjust the filename if necessary 
     $zf = check_or_revert($unpack_dir,$zf,$f2[$#f2]); 
     $n++; 
     push @msgs,qq{Unzipped file: $zf}; 
# Add file to list of unpacked file (for diagnostic purposes) 
     push @{$data{unpacked}},$unzipped; 
# Unzipped files are plonked back in the file queue, because there is a loop that deals with them. 
     push @{$data{fileq}},$unzipped; 
     } 
    } 
else 
    { 
    die "Error: $zipfile is not a valid zip file, Zip status=$status"; 
    } 
} 
関連する問題