[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>