HOME>WEBプログラム覚書>[PHP]アップロードしたファイルの種類の判定に$_FILES[][type]は使っちゃいけない。
[PHP]アップロードしたファイルの種類の判定に$_FILES[][type]は使っちゃいけない。
ブラウザとかOSによって全部バラバラじゃねーかw
詳細なバージョンとかメモってないんだけど、Windows XP のChromeとWindows 8.1 のChromeとUbuntuのChromeで試したところ application/zip、application/x-zip-compressed、application/octet-streamの3つが出た。
この値を信用するなってことは、当然ながらマニュアルにしっかりと書いてありましたね。はい。
$_FILES['userfile']['type']
ファイルの MIME 型。ただし、ブラウザがこの情報を提供する場合。 例えば、"image/gif" のようになります。 この MIME 型は PHP 側ではチェックされません。そのため、 この値は信用できません。
指定した型以外の ファイルを全て捨てるために変数 $_FILES['userfile']['type'] を用いることができますが、 これはあくまでいくつかのチェックの中のひとつとしてのみ実行するようにしてください。なぜなら、この値を設定するのはあくまでもクライアントであり、 PHP 側では何もチェックしていないからです。
・・・これ廃止じゃダメなの?w
var_dumpしてtypeにimage/gifとかあったら、ファイルタイプGetだぜっ!って何の疑いもなくで使っちゃうじゃないか。
どういう用途で必要なのか想像つかないんですけど、廃止になってないってことはなんかあるのかな?
とりあえず 5.3.0以上ならfinfo_fileが利用できるので解決なんですけど、 5.3.0以下の場合はどうすりゃいいんだ?。PECL 入れられる環境なんて限られてるだろうし。
mime_content_type()かGNU/Linuxの file コマンドでなんとかするかかな。