2009-06-26 4 views
2

アップロードフォームからPerl CGI(CGI.pmを使用)スクリプトに渡されるファイル名は、クライアントマシンによって異なり、クライアント依存のパス区切り文字を含む場合があります。渡されたパラメータを解析してファイル名(通常は最後のパス区切り文字に続く最後のサブ文字列)を判別する信頼できる方法がありますか?Perl CGIスクリプトでアップロードされたファイル名を確実に判別する方法はありますか?

答えて

4

クライアントがMSIE(Windowsパスを意味します)を使用しているときに、パス区切り文字で問題が発生したことがあります。私はそれを処理するためにかなり単純な正規表現を使用しました。ただし、最も一般的なパス区切り文字( '/'、 '\'、および時には ':')を処理するために正規表現を拡張することもできます。

また、(おそらくHTTP::DetectUserAgentまたはHTTP::BrowserDetectを使用して)ユーザエージェント文字列からファイルシステムの種類を調べることができます。 File :: BaseNameのfileparse_set_fstype関数を呼び出して、ファイルを解析することができたとします。

のような何か:

use File::Basename; 
use HTTP::BrowserDetect; 

# ... get the filename into $upload_file and agent into $user_agent_string. 

my $browser = HTTP::BrowserDetect->new($user_agent_string); 

my $ostype; 

$ostype = 'MSWin32' if $browser->windows; 
$ostype = 'Unix' if $browser->unix; 
# There are more tests available. 

fileparse_set_fstype($ostype); 

my $filename = basename($upload_file); 
+0

おかげニュート。 HTTP :: DetectUserAgentとFile :: BaseNameを組み合わせると、やり遂げる方法があるようです。 –

関連する問題