首页 > 解决方案 > 我处理图片上传的方式安全吗?

问题描述

我处理图片上传的方式安全吗?是否有人可以上传 .php 文件或其他可以以某种方式执行 php 代码的文件(即使攻击者知道上传后的实际文件路径?)

function random($longueur = 10)
  {
    return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($longueur/strlen($x)) )),1,$longueur);
  } 

  $random = random(5);

  //POST DATA
  $img_name = htmlspecialchars($_POST["img_name"]);

  //IMAGE
  mkdir('../../assets/images/'.$random.'/');
  $target_dir = '../../assets/images/'.$random.'/';
  $target_file = $target_dir . basename($_FILES["img_src"]["name"]);
  $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

  //ARRAY EXTENSION GOOD
  $extension_autorisee = array('.png', '.jpg', '.jpeg', 'png', 'jpg', 'jpeg');

  if (in_array($imageFileType, $extension_autorisee)){

  //MOVE IMAGE
  move_uploaded_file($_FILES["img_src"]["tmp_name"], $target_file);
  $filename = $random."/".$_FILES['img_src']['name'];

  }

标签: phpsecurityfile-uploadimage-uploading

解决方案


它看起来相当安全,唯一的是它不检查 MIME 类型。我真的不知道您存储这些文件的目的是什么,并且大多数现代浏览器在收到嵌入了 HTML 的图像时只会抛出错误,但这仍然需要研究。

另外,我不是密码学专家,但您可能想研究该字符串的“随机性”。这可能是一个很好的资源。加密安全 的随机字符串函数除此之外它看起来还不错。

闪电编辑:我认为这类问题更适合https://codereview.stackexchange.com/


推荐阅读