php - 我处理图片上传的方式安全吗?
问题描述
我处理图片上传的方式安全吗?是否有人可以上传 .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'];
}
解决方案
它看起来相当安全,唯一的是它不检查 MIME 类型。我真的不知道您存储这些文件的目的是什么,并且大多数现代浏览器在收到嵌入了 HTML 的图像时只会抛出错误,但这仍然需要研究。
另外,我不是密码学专家,但您可能想研究该字符串的“随机性”。这可能是一个很好的资源。加密安全 的随机字符串函数除此之外它看起来还不错。
闪电编辑:我认为这类问题更适合https://codereview.stackexchange.com/
推荐阅读
- kubernetes - 如何将 linkerd 安装为伞形图的一部分?
- ios - 如何在 Objective-C iOS 中的 AVPlayerViewController 上添加自定义按钮?
- python - Forge Reality Capture:指定的照片场景 ID 不存在
- java - 尝试查找主题或队列时,找不到请求的特定 JMS 服务器
- android - 使用 Delphi 社区版的 TFDLocalSQL 在 Android 平台上运行 Multi Device App 时出错
- python - 如何使用 JSON 解析网站并保存到文本文件?
- yii2 - Kartik depdrop 404 错误Ubuntu
- php - NULL/空格的PHP输出
- r - 将灰度图像转换并保存为例如 viridis 颜色方案
- gis - Netlogo GIS - 不支持的文件类型 - shapefile