当前位置: 首页 > 面试题库 >

PHP图像上传安全检查清单

公良同
2023-03-14
问题内容

我正在编写脚本以将图像上传到我的应用程序。以下安全步骤是否足以使应用程序从脚本角度安全?

  • 使用.httaccess禁止PHP在上传文件夹中运行。
  • 如果文件名包含字符串“ 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()用于任何上传。

后期编辑:顺便说一句,您希望对上传文件夹有严格的限制。这些地方是发生许多攻击的黑暗角落之一。这对于任何类型的上载和任何编程语言/服务器均有效。



 类似资料:
  • 问题内容: 我不知道这种情况是否会发生,但是我会尝试的。 在过去的一个小时中,我对图像上传安全性进行了研究。我了解到有很多功能可以测试上传。 在我的项目中,我需要确保上传的图片安全。可能还有很多,并且可能需要很多带宽,因此购买API是不可行的。 因此,我决定获得用于真正安全图像上传的完整PHP脚本。我还认为这将对许多人有所帮助,因为不可能找到真正安全的人。但是我不是php方面的专家,因此添加一些功

  • 通过系统内置规则,将匹配规则的安全性较低的资源扫描出来并按照建议进行处理,从而提高系统安全性的目的。 建议列表 建议列表显示所有匹配优化建议规则的资源列表,用户可根据建议对资源进行处理。 忽略列表 忽略列表显示不需要处理的资源或一类规则建议。 规则配置 规则配置即根据系统内影响资源安全的条件设置相应的规则,如安全组的规则设置等,当资源匹配规则则表示资源的安全性较低,需要用户进行处理等。

  • 当我用PHP上传imagen时,我没有收到任何错误,并且服务器上的图像是0字节。考虑的事项: 文件上传在phpinfo()中打开。 在phpinfo()中,上传文件的最大大小为8M Upload_tmp_dir已设置并具有777个权限 如果我运行file_exists($_FILES['userfile']['tmp_name']),它将返回true 如果我运行getimagesize($\u F

  • 问题内容: 我有一个上传控件,用于将图像上传到服务器,但是在上传之前,我只想确保图像尺寸正确。客户端上有JavaScript可以做的任何事情吗? 问题答案: 您可以在提交表单之前检查它们: 这仅适用于现代浏览器,因此您仍然必须在服务器端检查尺寸。您也不能信任客户端,因此这是您仍然必须在服务器端检查它们的另一个原因。

  • 我不知道这是否会发生,但我会试试。 在过去的一个小时里,我研究了图像上传的安全性。我了解到有很多函数可以测试上传。 在我的项目中,我需要安全地上传图像。也有可能是一个非常大的数量,它可能需要大量的带宽,所以购买一个API不是一个选项。 所以我决定得到一个完整的PHP脚本,用于真正安全的图像上传。我也认为这对许多人有帮助,因为不可能找到真正安全的。但是我不是PHP的专家,所以添加一些功能对我来说真的

  • 问题内容: 我对jQuery和Ajax函数还比较陌生,但是过去几天一直在使用Ajax表单。我在尝试上传图像时遇到文件上传问题。在寻找资源时,我找不到任何有用的东西,因为它们似乎过于复杂,毫无意义,没有任何解释,这无助于我进一步学习。 我已经编写了以下代码来处理Ajax中的图片上传: 这向文件发送了一个请求,但是没有发送数据,基本上我的表单实际上是这样的: 似乎没有任何数据在标头中传递,我认为我将通