ファイル接尾辞と MIME タイプ検出を使用する
通常、ファイル タイプを厳密に制限したい場合は、単純に $_FILES['myFile']['type'] を使用してファイルの MIME タイプを取得できます。ファイルを調べて、それが正当なタイプであるかどうかを検出します。
あるいは、ファイル名の最後の数文字を取得してファイル接尾辞を取得することもできますが、残念ながら、これらの方法では十分ではなく、ファイルの拡張子を簡単に変更してこの制限を回避できます。さらに、MIME タイプ情報はブラウザによって送信され、すべてではないにしても、ほとんどのブラウザはファイル拡張子に基づいて MIME タイプ情報を提供します。したがって、拡張子と同様に、MIME タイプは簡単に偽装される可能性があります。
「マジック バイト」の使用
ファイルの種類を判断する最良の方法は、「マジック バイト」として知られるファイルの最初の数バイトを調べることです。マジック バイトは基本的に、ファイル ヘッダーまたはファイルの末尾にある 2 ~ 40 バイトのさまざまな長さの署名です。ファイルの種類は何百もあり、そのうちのかなりの数のファイルには、複数のファイル署名が関連付けられています。ここでファイル署名のリストが表示されます。
怠惰な方法は、PHP 5.3.0 ではデフォルトで有効になっている fileinfo 拡張子を使用することです (公式マニュアルによる)。有効になっていない場合は、自分で有効にすることができます。
たとえば、Windows の場合。 :
コードをコピーします コードは次のとおりです:
extension=php_fileinfo.dll
コードをコピーします コードは次のとおりです:
extension=fileinfo.so
#正しく動作しない場合は、次の行を追加してください。
#mime_magic .magicfile=/usr/share/file/magic
コードをコピー コードは次のとおりです。
function getFileMimeType($file) {
$buffer = file_get_contents ($file);
$finfo = new finfo(FILEINFO_MIME_TYPE);
return $finfo->buffer($buffer);
$mime_type = getFileMimeType($file); 🎜 >switch($mime_type) {
case "image/jpeg":
// ここにアクションが入ります...
}
画像のアップロードを処理します
コードは次のとおりです: // ファイル入力フィールドの name 属性が myfile $tempFile = $ _FILES['myFile']['tmp_name']; // アップロード中に PHP によって作成された一時ファイルのパス
$imginfo_array = getimagesize($tempFile) // そうでない場合は false を返します。有効な画像ファイル if ($imginfo_array !== false) {
$mime_type = $imginfo_array['mime'];
switch($mime_type) {
case "image/jpeg":
// あなたのアクションはここにあります...
}
}
else {
echo "これは有効な画像ファイルではありません"
}
「マジック バイト」のフェッチと解釈を手動で読み取る