我正在编写一个脚本来将图像上传到我的应用程序.以下安全步骤是否足以确保应用程序在脚本端的安全?

  • 使用禁用上载文件夹中运行的PHP.httaccess.
  • 如果文件名包含字符串"php",则不允许上载.
  • 仅允许扩展:jpg、jpeg、gif和png.
  • 仅允许图像文件类型.
  • 不允许使用两种文件类型的图像.
  • 更改图像名称.
  • 上传到子目录而不是根目录.

这是我的脚本:

 $filename=$_FILES['my_files']['name'];
 $filetype=$_FILES['my_files']['type'];
 $filename = strtolower($filename);
 $filetype = strtolower($filetype);

 //check if contain php and kill it 
 $pos = strpos($filename,'php');
 if(!($pos === false)) {
  die('error');
 }




 //get the file ext

 $file_ext = strrchr($filename, '.');


 //check if its allowed or not
 $whitelist = array(".jpg",".jpeg",".gif",".png"); 
 if (!(in_array($file_ext, $whitelist))) {
    die('not allowed extension,please upload images only');
 }


 //check upload type
 $pos = strpos($filetype,'image');
 if($pos === false) {
  die('error 1');
 }
 $imageinfo = getimagesize($_FILES['my_files']['tmp_name']);
 if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg'&& $imageinfo['mime']      != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
   die('error 2');
 }
//check double file type (image with comment)
if(substr_count($filetype, '/')>1){
die('error 3')
}

 // upload to upload direcory 
 $uploaddir = 'upload/'.date("Y-m-d").'/' ;

if (file_exists($uploaddir)) {  
} else {  
    mkdir( $uploaddir, 0777);  
}  
  //change the image name
 $uploadfile = $uploaddir . md5(basename($_FILES['my_files']['name'])).$file_ext;



  if (move_uploaded_file($_FILES['my_files']['tmp_name'], $uploadfile)) {
 echo "<img id=\"upload_id\" src=\"".$uploadfile."\"><br />";
  } else {
   echo "error";
  }

欢迎任何新提示:)

推荐答案

使用GD(或Imagick)重新处理图像并保存处理后的图像.对于黑客来说,所有其他的都是有趣的.

编辑:正如rr所指出的,任何上传都使用move_uploaded_file().

后期编辑:顺便说一句,你应该对上传文件夹有严格的限制.这些地方是许多剥削行为发生的黑暗角落之一.这对任何类型的上传和任何编程语言/服务器都有效.https://www.owasp.org/index.php/Unrestricted_File_Upload元支票

Php相关问答推荐

在AJX请求中使用简写后,FormData出现非法调用错误

使用WordPress wp_mail()的邮箱标题无效

在PHP中循环访问多维数组,并按组显示内容

如何从该字符串中删除这些图标转换的ASCII问号字符?

如果日期是过go 日期,则隐藏事件发布类型

在WP工具中页面加载时可短暂看到的JavaScript生成的字段

Laravel自定义验证规则更正

Laravel Http::get not working on controller

在WooCommerce循环中添加子类别和产品之间的分隔符

防止在WordPress短代码中显示重复产品并请求代码更正

PHP:数组的等边

使用 Composer 找不到 Google APIClient 类

Symfony:指定 data_class 时,提交的表单获取初始化前不得访问

PHP 简单 XML Xpath 上移树(带有名称的父级)

WooCommerce 订单和邮箱通知的自定义产品描述

基于WooCommerce中的产品变体自定义感谢页面跳转

从图像URL中获取文件扩展名?

PHP使用三元运算符进行null合并(再次)

Shopware 6.4.20店铺激活问题

按数字然后按字符串对关联 PHP 数组进行排序