ファイル接尾辞と MIME タイプ検出を使用する
通常、ファイル タイプを厳密に制限したい場合は、単純に $_FILES['myFile']['type'] を使用してファイルの MIME タイプを取得し、それが MIME タイプであるかどうかを確認します。正当なタイプ。
または、ファイル名の最後の数文字を取得してファイルの接尾辞を取得することもできますが、残念ながら、これらの方法では十分ではなく、ファイルの拡張子を簡単に変更してこの制限を回避できます。さらに、MIME タイプ情報はブラウザによって送信され、すべてではないにしても、ほとんどのブラウザはファイル拡張子に基づいて MIME タイプ情報を提供します。したがって、拡張子と同様に、MIME タイプは簡単に偽装される可能性があります。
「マジック バイト」の使用
ファイル タイプを判断する最良の方法は、「マジック バイト」として知られるファイルの最初の数バイトを調べることです。マジック バイトは基本的に、ファイル ヘッダーまたはファイルの末尾にある 2 ~ 40 バイトのさまざまな長さの署名です。ファイルの種類は何百もあり、そのうちのかなりの数のファイルには、複数のファイル署名が関連付けられています。ここでファイル署名のリストが表示されます。
怠惰な方法は、PHP 5.3.0 ではデフォルトで有効になっている fileinfo 拡張子を使用することです (公式マニュアルによると)。有効になっていない場合は、自分で有効にすることができます
たとえば、Windows の場合: