0

重複の可能性:
アップロードされたファイルが MIME タイプのない画像かどうかを確認するには?
ユーザー提供のファイルと画像のアップロード、処理、保存、配信

画像共有スクリプトがあり、その半分を作成しました。ユーザーは任意の php または cgi ファイルの名前を .jpg に変更してアップロードでき、正常にアップロードされます

このような偽の画像のアップロードを防ぐにはどうすればよいですか?

これがファイルタイプを確認する私の方法です

$userfile_type = $_FILES['ファイル']['タイプ'];

PHPファイルの名前をphp.jpgに変更すると、簡単にアップロードできます。

4

5 に答える 5

3
// return mime type ala mimetype extension
$finfo = finfo_open(FILEINFO_MIME_TYPE);
    $type = finfo_file($finfo, $tmp_name);
finfo_close($finfo);

これは、例のようにブラウザではなく、ファイルのタイプを提供するサーバーです。

GD を使用すると、ファイルが画像でない場合にゼロを返す getimagesize() のようなことができます

編集:「getimagesize は GD ライブラリ関数ではありません。PHP にネイティブです」Vivek に感謝

ハッピーコーディング!!

于 2012-12-21T14:02:48.823 に答える
1

getimagesize() を使用して画像サイズを確認できます。関数がサイズを取得できない場合は、False が返されます。GD ライブラリを使用し、 imagecreatefromstring() 関数を使用して、それが実際の画像かどうかを確認できればさらに良いでしょう。

于 2012-12-21T14:05:28.660 に答える
1

exif_imagetype()

php.netの例:

    if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
        echo 'The picture is not a gif';
    }

また、これは私がリンクしたphp.netページから直接です:

* 関数 exif_imagetype() が利用できない場合。次の回避策を試すことができます:*

if ( ! function_exists( 'exif_imagetype' ) ) {
    function exif_imagetype ( $filename ) {
        if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) 
        {
            return $type;
        }
    return false;
    }
}
于 2012-12-21T14:07:02.947 に答える
1

imagemagic を使用して画像情報を確認する

于 2012-12-21T14:00:36.307 に答える
1

それを行う最良の方法の 1 つは、http://php.net/manual/en/ref.fileinfo.phpを使用することです。

于 2012-12-21T14:02:48.510 に答える