0

画像を保存し、誰かが画像とは異なるマルウェアやその他のファイルを保存するのを避けるために、次のコードを書きました。

$content = file_get_contents($image);
file_put_contents($path, $content);

// Check imagesize to know if it is an image or not:
$sizeimage = getimagesize(dirname(__FILE__)."/".$path);
if($sizeimage[0]<10000){ echo "ok"; }else{ unlink(dirname(__FILE__)."/".$path); }

CSSファイルのような別のファイルを挿入しようとすると、CSSがデータベースに保存されます。

なんで ?私のコードで何が間違っていますか?

4

5 に答える 5

2

画像ファイルが無効な場合は、$sizeimage[0]戻ります( PHP ドキュメント0を確認してください)。したがって、ファイルが有効なイメージでない場合 、次のステートメントも検証されます。
true

if($sizeimage[0]<10000)

次のステートメントの使用を検討してください。

if($sizeimage[0]>0 && $sizeimage[0]<10000)

これは、1000 ピクセルより小さい画像が見つかったtrue場合にのみ検証されます。getimagesize()

于 2012-06-18T07:39:31.770 に答える
2
if($sizeimage[0]<10000){ echo "ok"; }else{ unlink(dirname(__FILE__)."/".$path); }

ファイルが画像でない場合、 getimagesize は false を返しますが、それをチェックしません。[0] を使用しますが、それが存在しない場合は、10000 未満の "null" になります。

<?php
if($sizeimage !== false && isset($sizeimage[0]) && $sizeimage[0] < 10000 && $imagesize[0] > 0) {
    echo "Okay.";
}
else {
    unlink(dirname(__FILE__)."/".$path);
}
于 2012-06-18T07:40:10.610 に答える
1

ファイル拡張子を確認してください。有効な拡張子でない場合は許可しないでください。

ここでPHPの例を参照してください

if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg"))) { echo 'valid file'; }else { echo 'invalid file type';} 

ファイルを削除するには、PHP unlink()を使用します

于 2012-06-18T07:55:47.267 に答える
1

getimagesize はfalseエラーを返します。この意味は:

  • $sizeimage = false
  • $sizeimage[0] = null
  • nullに変換し00 < 10000
于 2012-06-18T07:40:03.187 に答える
0

次のようにコードを修正しました。

$content = file_get_contents($image);
file_put_contents($path,$content);

// Check imagesize to know if it is an image or not:

$sizeimage = getimagesize(dirname(__FILE__)."/".$path);
if($sizeimage){ echo "ok"; } else { unlink(dirname(__FILE__)."/".$path); }

これはうまくいくはずです。$sizeimage が null または false の場合、リンク解除が実行されます。

MIME タイプをチェックすることで、ファイルが画像であるかどうかを実際に判断するより良い方法があります。finfo_file (PHP 4) またはfinfo (PHP 5)を参照してください。

于 2012-06-18T08:19:51.033 に答える