画像が実際の画像であることを確認したい場合は、gd http://www.php.net/gdを使用してロードできます
gd リソースが正しく作成されている場合、画像は実際の画像です
最初に次を使用して mime を検出します。
getimagesize($filename);
次に、たとえば、gd への jpeg ロードの場合:
$gdresource = imagecreatefromjpeg($filename);
警告なしで有効/作成された場合$gdresource
、画像は有効で破損していません... getimagesize()
(おそらく)破損した画像を検出するのに十分ではありません
$_FILES['blabla']['name']
また、別の重要な注意事項...有効でないutf-8シーケンスが含まれている可能性があり(たとえば、utf-8を使用していると仮定して)、ユーザー入力として潜在的な攻撃メカニズムになる可能性があるため、依存しないでください
そのため、それも検証/サニタイズする必要があります
$originalFileName = $_FILES['blabla']['name'];
$safeOriginalFileName = iconv('UTF-8', 'UTF-8//IGNORE', $originalFileName);
// more additional checks here. for example filename is empty ""
move_uploaded_file(...., $safeOriginalFileName);
また、$_FILES['blabla']['name']
ファイル拡張子が含まれていることに注意してください。これは正しくない可能性があります。そのため、それを取り除き、実際の正しい拡張子を使用する必要があります (以前に を使用して解決したものgetimagesize() + imagecreatefrom*()
) 。
$safeOriginalFileName = basename( $safeOriginalFileName ); // removes the extension
$safeOriginalFileName = $safeOriginalFileName . ".jpg"; // correct extension
お役に立てれば :)
また、DaveRandomが指摘したよう$_FILES['blabla']['type']
に、私が提案したように代わりに使用してください。getimagesize() + imagecreatefrom*()