Php文件图像上传安全性

时间:2013-08-07 14:49:59

标签: php

$filename=$_FILES['file']['name'];
$type=$_FILES['file']['type'];
$extension=strtolower(substr($filename, strpos($filename, '.')+1));
$size=$_FILES['file']['size'];


if(($extension=='jpg' || $extension=='jpeg') && ($type!='image/jpg' || $type!='image/jpeg')){...

我有一个输入文件,可以让用户只上传jpg / jpeg图像,我有检查类型,扩展名,大小。

  1. 但是我不确定如何检查用户是否更改扩展名。(例如abc.php - > abc.jpg)

  2. 在将用户的图像保存到服务器之前需要检查的其他内容吗?

3 个答案:

答案 0 :(得分:3)

您可以使用exif_imagetype()

查看图片

http://www.php.net/manual/en/function.exif-imagetype.php

  

exif_imagetype()读取图像的第一个字节并检查它   签名。

答案 1 :(得分:2)

我建议使用finfo:

<?php
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    foreach (glob("*") as $filename) {
        echo finfo_file($finfo, $filename) . "\n";
    }
    finfo_close($finfo);

    /* outputs:
    text/html
    image/gif
    application/vnd.ms-excel
    */
?>

从php文档站点获取的示例。 在php文档页面http://www.php.net/manual/en/function.finfo-file.php

上查看更多信息

答案 2 :(得分:0)

@ Fabian的回答看起来很适合检查文件的类型。虽然我建议采用不同的方法来获取文件的扩展名。

考虑一个名为stack.overflow.jpg的文件。

$filename = 'stack.overflow.jpg';

// With your code $extension = 'overflow.jpg'
$extension=strtolower( substr( $filename, strpos( $filename, '.' ) +1 ) );

// With pathinfo() $extension = 'jpg'
$extension = pathinfo( $filename, PATHINFO_EXTENSION );

考虑使用pathinfo()获取文件扩展名:http://www.php.net/manual/en/function.pathinfo.php