1

以下のコードを使用して、アップロードされたファイルが実際に画像であるかどうかをテストします。(以下のコードは、共有サーバー上にあるため、ImageMagickを使用するときにphp Webサイトで見られるのと同じOOPスタイルではありません。これは、ImageMagickを使用するときにホスティングが提供する手順であり、実際のスクリプトには、ユーザーの再ルーティング、リンク解除、またはアップロードされたファイルの削除が含まれますさらに、以下のコードを批判しないでください。画像検証ツールとしてIMAGICK IDENTIFYを使用するという概念にこだわるだけです。)

<?php
if(!exec('/usr/bin/identify /home/user/public_html/joteco_test_folder/thisisanimage.jpg'))
{
echo "NOT AN IMAGE";
}
else
{
echo exec('/path/here/identify /path/here/thisisanimage.jpg');
}
?>

上記のコードで次のことを試しました。

  1. フォトショップcs6で作成された.jpg。(通過し、次の詳細をエコーし​​ました "810x203 810x203 + 0 +08ビットDirectClass32.4KB0.000u 0:00.000")

  2. .txtファイル。(失敗し、「NOT ANIMAGE」とエコーしました)

  3. 「IAMANIMAGE」というテキスト文字が書かれたメモ帳で作成された.jpgファイル。(失敗し、「NOT ANIMAGE」とエコーしました)

(私の見解では、それは成功したと思いますが、ハッカーは私がテスト#3で行ったこと以上のことをしていることを知っています。)

それで!アップロードされたファイルが実際に画像であるかどうかを確認するためのセキュリティチェックとしては、これで十分だと思いますか?または、この目的で使用できるImageMagickの他のツールはありますか?あなたの考え?

(アップロードされたファイルを検証する際の役に立たない方法としてstackoverflowで繰り返し言及されているため、(MIME | EXTENSION | GETIMAGESIZE)を提案または言及しないでください。ありがとうございます)

4

1 に答える 1

4

これはあなたを助けるはずです。

$im = @imagecreatefromjpeg($imgname);
if(!$im)
    {
    return false;
    }
else
    {
            imagedestroy($im);
            return true;
    }

その画像かどうかをチェックすることに加えて、不完全な(部分的にアップロードされた)画像に対してもfalseを返します

于 2013-03-21T04:02:47.733 に答える