2011-07-25 23 views
1

私は、画像を投稿するためにPHPで作成した画像アップロードプログラムの設定をしています。ファイルが実際に画像であることを確認する方法を見つけるのが難しいです。私はファイルの種類をチェックしていますが、他のチェックの中でもgetimagesize()を使っていますが、テキストファイルの名前をJPGファイルに変更すると、ファイルの検証によってファイルが許可されます。これが実際に画像であることをどうすれば保証できますか?私は上司に感染ファイルを実行させたくありません。PHPによる画像アップロードの検証

+1

使用しているgetimagesize(があるかもしれません)次元が有効な配列を返すことを確認してください。ファイルの名前を.txtに変更しても、ファイルの実際のヘッダーは保持されます。ファイル拡張子の単純なチェックは、それが目標であればうまくいくでしょう。 –

答えて

0

チェックが許可拡張子が

の.gif .jpgのJPEG形式の.pngあなたはImagickのidentifyImage()コマンドを使用することができます

0

許可する必要があります。
エラーが返ってきた場合や、画像データがない場合は、画像ではなく画像データを返します。このツールのコマンドラインバージョンがあります:http://www.imagemagick.org/script/identify.php imagemagickでPHPをコンパイルしていない場合

0

GDを使用して、アップロードした画像を再現します。画像が再生されない場合、画像ではありません!

この関数がfalseを返した場合、有効な画像ではありません。私はJPG、PNGやGIFよりも、それ以上に働いていないので、この関数(BMP?)に収まることができるそこにいくつかのより多くの画像タイプ...

function checkFileType($filetype,$tmp_name) 
{ 
    $return_val = false; 
    switch($filetype){ 
     case 'image/jpg': 
     case 'image/jpeg': 
     case 'image/pjpeg': 
      $return_val = @imagecreatefromjpeg($tmp_name); 
     break; 
     case 'image/gif': 
      $return_val = @imagecreatefromgif($tmp_name); 
     break; 
     case 'image/png': 
     case 'image/x-png': 
      $return_val = @imagecreatefrompng($tmp_name); 
     break; 
    } 
    return $return_val; 
} 
+0

簡単な画像確認のためにこれを行いますか? getimagesize()を使用して、ファイルが実際のイメージかどうかを判断してください。あなたが提供したソリューションは、それが何のために遅くて複雑でもあります。 –

関連する問題