受信したファイルが画像であることを確認する方法はありますPHP
か?
script
拡張機能のテストは、をアップロードしてその拡張機能を好きなように変更できるため、私にはあまり安全に聞こえません。
私も使ってみましgetimagesize
たが、その特定の問題にもっと適したものがあるかもしれません。
受信したファイルが画像であることを確認する方法はありますPHP
か?
script
拡張機能のテストは、をアップロードしてその拡張機能を好きなように変更できるため、私にはあまり安全に聞こえません。
私も使ってみましgetimagesize
たが、その特定の問題にもっと適したものがあるかもしれません。
getimagesize()は、ファイルが画像であるかどうかを判断するための最も明確な方法です。
if(@is_array(getimagesize($mediapath))){
$image = true;
} else {
$image = false;
}
これはgetimagesize()出力のサンプルであるため:
Array (
[0] => 800
[1] => 450
[2] => 2
[3] => width="800" height="450"
[bits] => 8
[channels] => 3
[mime] => image/jpeg)
MIMEtypeを取得するネイティブの方法:
PHP <5.3の場合はmime_content_type()
を使用し
ますPHP> = 5.3の場合はfinfo_open()またはmime_content_type()を使用します
MimeTypeを取得するための代替手段は、exif_imagetypeとgetimagesizeですが、これらは適切なライブラリがインストールされていることに依存しています。さらに、magic.mimeで指定されたリスト全体ではなく、画像のmimetypeを返す可能性があります。
PHP 4.3から利用可能でmime_content_type
あり、FileInfo拡張機能の一部です(PHP 5.3以降、デフォルトで有効になっています。ただし、手動で有効にする必要があるWindowsプラットフォームを除きます。詳細については、こちらを参照してください)。
システムで何が利用できるかを気にしたくない場合は、4つの関数すべてをプロキシメソッドにラップして、関数呼び出しを利用可能なものに委任します。
function getMimeType($filename)
{
$mimetype = false;
if(function_exists('finfo_open')) {
// open with FileInfo
} elseif(function_exists('getimagesize')) {
// open with GD
} elseif(function_exists('exif_imagetype')) {
// open with EXIF
} elseif(function_exists('mime_content_type')) {
$mimetype = mime_content_type($filename);
}
return $mimetype;
}
アップロードされたファイルが正しい形式であるかどうかを検出するためにファイル拡張子とgetimagesize
機能を使用することは、エントリレベルのチェックであり、真の拡張子と画像ヘッダーの一部のバイトを含むが間違ったコンテンツのファイルをアップロードすることで簡単にバイパスできます。
安全を確保するために、アップロードした画像のサムネイル/サイズ変更(元の画像サイズでも)を作成し、アップロードした画像の代わりにこのバージョンを保存することができます。<?php
また、アップロードされたファイルコンテンツを取得して、ファイルが画像であるかどうかを確認するなどの特殊文字を検索することもできます。