アップロードされたファイルが画像であるかどうかを知ることができますか?アップロードされたファイルの種類がイメージかどうかを知ることはできますか?
私は任意のソリューション、クライアントサイド、サーバーサイド、またはその両方で公開しており、ケースに基づいて選択します。
アップロードされたファイルが画像であるかどうかを知ることができますか?アップロードされたファイルの種類がイメージかどうかを知ることはできますか?
私は任意のソリューション、クライアントサイド、サーバーサイド、またはその両方で公開しており、ケースに基づいて選択します。
はい、ファイルのmagic numberを確認してください。
次のコードを使用して、ファイルがイメージであるかどうかを確認できます。
public bool IsFileAnImage(string filePath)
{
try
{
Image image = Image.FromFile(filePath))
}
catch
{
return false;
}
finally
{
image.Dispose();
}
return true;
}
ファイルの拡張子を調べるのが簡単な方法です。
これは、以下の機能を使用してGDとサーバー側を行うことができます((modified version of this)
function imageFileTypeFromBinary($file)
{
$binary = file_get_contents($file);
if (
!preg_match(
'/\A(?:(\xff\xd8\xff)|(GIF8[79]a)|(\x89PNG\x0d\x0a)|(BM)|(\x49\x49(\x2a\x00|\x00\x4a))|(FORM.{4}ILBM))/',
$binary, $hits
)
) {
return 'application/octet-stream';
//return false;
}
static $type = array (
1 => '.jpeg',
2 => '.gif',
3 => '.png',
4 => '.x-windows-bmp',
5 => '.tiff',
6 => '.x-ilbm',
);
return $type[count($hits) - 1];
// or simply return true
// return true;
}
はあなたがMIMEタイプとは対照的に、それが真、またはfalseを返すことができます、希望する必要があります
。 – NotMe
私は、簡単ではないと言っていましたが、ファイルの拡張子は、あなたがファイルをアップロードしても、ユーザーが嘘をつくよう懸念します。ユーザーがvirus.exeの名前をfunpic.gifに変更した場合、拡張子はmakです偽りの約束をする。しかし、GIFであると主張しているので、それが実際に存在するかどうかを具体的にテストし、そうでなければそれを拒否することができます。それ以外の場合は、すべての可能性を排除しなければなりません。 –
拡張子の名前を変更することで危険なファイルを無害にすることができます。例えば、ファイルシステムを破壊する '* .VBS'ファイルは、' * .TXT'に名前を変更すると読み物としての価値があります。 –