Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中验证文件上载的正确方法-包括用户更改文件扩展名?_Php_Image_File_Validation_Upload - Fatal编程技术网

在PHP中验证文件上载的正确方法-包括用户更改文件扩展名?

在PHP中验证文件上载的正确方法-包括用户更改文件扩展名?,php,image,file,validation,upload,Php,Image,File,Validation,Upload,目前,我在允许上传图像之前,先在PHP中检查图像的所有元素。但是当涉及到像文件扩展名这样的事情时,我有点担心 我使用以下命令仅允许上载特定类型的文件: $allowed_ext = array("jpeg", "jpg", "gif", "png"); $tmp_ext = explode(".", $_FILES["file"]["name"]); $ext = strtolower(end($tmp_ext)); if ((($_FILES["file"]["type"] == "ima

目前,我在允许上传图像之前,先在PHP中检查图像的所有元素。但是当涉及到像文件扩展名这样的事情时,我有点担心

我使用以下命令仅允许上载特定类型的文件:

$allowed_ext = array("jpeg", "jpg", "gif", "png");

$tmp_ext = explode(".", $_FILES["file"]["name"]);
$ext = strtolower(end($tmp_ext));

if ((($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/png"))
&& in_array($ext, $allowed_ext)) {
    //Continue
} else {
    //Don't allow
}
但这会阻止所有形式的用户自己更改文件扩展名吗?e、 g.如果用户将恶意文件的扩展名更改为.jpeg或.png-这会阻止它吗


我找不到任何澄清这一点的帖子,因此非常感谢您的帮助

简而言之,不,你不能依赖MIME类型。类型和文件扩展名都由客户端提供


看起来您可以使用getimagesize()来验证图像,这归功于此线程:

简短回答,不,您不能依赖MIME类型。类型和文件扩展名都由客户端提供


看起来您可以使用getimagesize()来验证图像,这归功于此线程:

简短回答,不,您不能依赖MIME类型。类型和文件扩展名都由客户端提供


看起来您可以使用getimagesize()来验证图像,这归功于此线程:

简短回答,不,您不能依赖MIME类型。类型和文件扩展名都由客户端提供

看起来您可以使用getimagesize()验证图像,这归功于此线程:

  • 获取文件扩展名并将其与文件类型匹配(如果不匹配):fail
  • 使用扩展名/MIME类型指定的文件格式从GD库调用相应的
    imagecreatefrom*()
    函数。如果它不是扩展/MIME类型指定类型的图像,则函数将返回
    false

  • 获取文件扩展名并将其与文件类型匹配(如果不匹配):fail
  • 使用扩展名/MIME类型指定的文件格式从GD库调用相应的
    imagecreatefrom*()
    函数。如果它不是扩展/MIME类型指定类型的图像,则函数将返回
    false

  • 获取文件扩展名并将其与文件类型匹配(如果不匹配):fail
  • 使用扩展名/MIME类型指定的文件格式从GD库调用相应的
    imagecreatefrom*()
    函数。如果它不是扩展/MIME类型指定类型的图像,则函数将返回
    false

  • 获取文件扩展名并将其与文件类型匹配(如果不匹配):fail
  • 使用扩展名/MIME类型指定的文件格式从GD库调用相应的
    imagecreatefrom*()
    函数。如果它不是扩展/MIME类型指定类型的图像,则函数将返回
    false


  • 你将如何处理这些图像?在浏览器中显示它们?任何像样的浏览器都应该防止图像中的恶意代码,所以我认为你不必担心。如果您真的担心,可以结合使用getimagesize()并查看如何使用ClamAV扩展名/程序扫描文件以查找恶意代码。没有什么是完美的。你将如何处理这些图像?在浏览器中显示它们?任何像样的浏览器都应该防止图像中的恶意代码,所以我认为你不必担心。如果您真的担心,可以结合使用getimagesize()并查看如何使用ClamAV扩展名/程序扫描文件以查找恶意代码。没有什么是完美的。你将如何处理这些图像?在浏览器中显示它们?任何像样的浏览器都应该防止图像中的恶意代码,所以我认为你不必担心。如果您真的担心,可以结合使用getimagesize()并查看如何使用ClamAV扩展名/程序扫描文件以查找恶意代码。没有什么是完美的。你将如何处理这些图像?在浏览器中显示它们?任何像样的浏览器都应该防止图像中的恶意代码,所以我认为你不必担心。如果您真的担心,可以结合使用getimagesize()并查看如何使用ClamAV扩展名/程序扫描文件以查找恶意代码。但没有什么是完美的。