[PHP-users 12478] Re: [[ 解決 ]] ファイルアップロード時にファイル名が正しく扱えない問題

Osamu Shigematsu php-users@php.gr.jp
Thu, 09 Jan 2003 13:37:48 +0900


重松です。こんにちは。

> 2.ファイル名"/","\"を含んでいると問題があるので
>   「StripSlashes AddSlashess」を用いて回避をするという方法がある

あくまでも、漢字コードを EUC にして解決したのは、
マルチバイト文字の 2 バイト目 (以降) に \ と同じコードが
存在した場合の動作であって、それ以上ではないと思います。

たとえば、手元の Windows XP では、\ 以外にも、
/ : ? * " < > もファイル名の一部に使えないようです。

しかし、同じく手元の Solaris では、ファイル名として
: や " を含むことができますから、当然そういう名前のファイルが
アップロードされる可能性があります。

なので、Windows 2000 もおそらく同じと思うのですが、
使えない文字を検出して、はじく、置き換える、
などが必要ではないでしょうか。

たとえば:

	$filename = mb_ereg_replace('[/:?*"\\<>'],'_',$filename);

のような感じです。

ただし、この方法では、Windows のファイルシステム (名前は知らない)、
Mac OS X の HFS+ ファイルシステムでは、
アルファベットの大文字小文字を区別しませんから、
そういうことにも配慮しないと、ファイルシステムを変えると
動作が変わってしまう、ということになりかねません。

Linux の EXT3 などだと、大文字、小文字を区別すると思います。

# その昔、HFS+ で apache を動かすと、これがセキュリティーホールでした。

-- 
Osamu Shigematsu <m5issige@mr.hitachi-medical.co.jp>