【发布时间】:2019-12-29 21:12:24
【问题描述】:
我处理图片上传的方式安全吗?是否有人可以上传 .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'];
}
【问题讨论】:
-
现在,我更喜欢将这类文件单独存储到应用程序文件中,例如在 Amazon S3 等云托管解决方案或 MySQL 数据库本身中。对于您的情况,确保 PHP 不能在上传文件夹中执行,我也会避免使用用户提供的文件名作为磁盘上的名称,也就是在写入文件系统时不要使用
$_FILES['img_src']['name']或至少把它通过验证/过滤。
标签: php security file-upload image-uploading