2009-07-03 4 views

答えて

6

はい、ファイルのmagic numberを確認してください。

2

次のコードを使用して、ファイルがイメージであるかどうかを確認できます。

public bool IsFileAnImage(string filePath) 
{ 
    try 
    { 
     Image image = Image.FromFile(filePath)) 
    } 
    catch 
    { 
     return false; 
    } 
    finally 
    { 
     image.Dispose(); 
    } 

    return true; 
} 
-2

ファイルの拡張子を調べるのが簡単な方法です。

+1

。 – NotMe

+1

私は、簡単ではないと言っていましたが、ファイルの拡張子は、あなたがファイルをアップロードしても、ユーザーが嘘をつくよう懸念します。ユーザーがvirus.exeの名前をfunpic.gifに変更した場合、拡張子はmakです偽りの約束をする。しかし、GIFであると主張しているので、それが実際に存在するかどうかを具体的にテストし、そうでなければそれを拒否することができます。それ以外の場合は、すべての可能性を排除しなければなりません。 –

+0

拡張子の名前を変更することで危険なファイルを無害にすることができます。例えば、ファイルシステムを破壊する '* .VBS'ファイルは、' * .TXT'に名前を変更すると読み物としての価値があります。 –

0

これは、以下の機能を使用して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を返すことができます、希望する必要があります

関連する問題