文件上传漏洞修复的一些想法使用php完成

该文章探讨了如何防止文件上传漏洞,通过前端限制文件类型并提交到后端进行校验,包括检查文件大小、文件类型、使用MD5重命名以及转换图像格式来增强安全性。后端通过检测文件是否为空、是否为图像、文件是否存在、大小是否超过限制以及验证文件MIME类型来防止恶意文件上传。
摘要由CSDN通过智能技术生成

针对文件上传漏洞,在使用中思考怎么进行反制,所以写了这些代码进行,尝试进行阻止,如果有绕过方式可以评论一下,我看能不能在完善一些

  • 前端部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="inclu.php" method="post" enctype="multipart/form-data">
        <span>上传文件</span><input type="file" name="file" id="file">
        <input type="submit" value="上传" name="submit">
    </form>
</body>
</html>
  • 后端校验

<?php
$target = "/opt/lampp/htdocs/sefa15/tupian/";   //设定固定的存储路径
$target_log = $target . basename($_FILES["file"]["name"]);   //对文件名进行拼接
// echo $_FILES["file"]["name"];//:客户端机器文件的原名称
// echo $target_log;
$imageFileType = strtolower(pathinfo($target_log,PATHINFO_EXTENSION));  //以小写形式,返回最后一个末尾值
$md5imageFileType=md5(strtolower(pathinfo($target_log,PATHINFO_FILENAME)));  //md5形式重命名
// echo $md5imageFileType;
// echo $imageFileType;
$target_log=$target.$md5imageFileType.'.'.$imageFileType; //重新拼接
// echo $target_log;
// $check = getimagesize($_FILES["file"]);

$target_error=$_FILES['file']['error'];
if ($target_error != 0){
    die ('上传文件不能为空');
}

$check = getimagesize($_FILES["file"]["tmp_name"]);  //获取图像信息,临时名
// echo $check;
if($check !== false) {
    echo "文件是图像".$check["mime"];  //返回图像mime格式
} else {
    die ("文件不是图像");
}

if (file_exists($target_log)) {  //检查图片是否存在
    die ("对不起,该文件已经存在");
}


if ($_FILES["file"]["size"] > 1048576) {
    die ("对不起,你的文件太大了");  //大于1兆图片不能进入
}

$suff=array("jpg","png","jpeg","gif");
if(in_array($imageFileType,$suff)  ) { //判断后缀名是否在数组中
    echo ' ';
}else{
    die ("只允许上传 JPG、JPEG、PNG & GIF 格式的文件");  
}

if($check["mime"]='image/jpeg'){
    $newimg=imagecreatefromjpeg($_FILES["file"]["tmp_name"]);  //获取上传图片url
    imagejpeg($newimg,$target_log);   //重新生成一张图片,上传
    echo "文件 ". basename( $_FILES["file"]["name"]). " 已经被成功上传";
}
elseif($check["mime"]='image/png'){
    $newimg=imagecreatefrompng($_FILES["file"]["tmp_name"]);
    imagepng($newimg,$target_log);
    echo "文件 ". basename( $_FILES["file"]["name"]). " 已经被成功上传";
}
elseif($check["mime"]='image/gif'){
    $newimg=imagecreatefromgif($_FILES["file"]["tmp_name"]);
    imagegif($newimg,$target_log);
    echo "文件 ". basename( $_FILES["file"]["name"]). " 已经被成功上传";
}
imagedestroy($newimg);  //删除之前的临时变量
//通过重新生成图片,防御一句话木马

?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值