当前位置: 首页 > article >正文

上传文件防木马函数

项目环境:TP6、TP5

问题:解决旧项目中上传上来的文件校验不严格。导致会有木马文件入侵的情况发生。除了上篇博文中提及的限制上传文件存储的目录不可执行php文件外。仍需在入口处严格检验上传文件的类型,排除php类可执行文件上传。

解决

/**
 * 判断上传文件是否合法   如:php文件不可上传
 *
 * @author 
 * @param $file
 * @return  /bool
 */
function checkUploadFile($file, $only_php_check=true, $allowed_types=[], $allowed_extensions=[]) {

    if (!isset($file)) {
        return false;
    }

    $check_php = true;

    //允许的文件类型(mimeType): application/vnd.ms-excel
    //不允许的类型 text/x-php
    $mime_type = strtolower($file->getMime());//text/x-php
    $extension = strtolower($file->getOriginalExtension());//php

    if($mime_type == 'text/x-php' || $extension == 'php'){
        $check_php = false;//上传文件为php文件
    }

    if($only_php_check){//仅判断是否为php文件的话 此时就返回结果。终止后续判断了。
        return $check_php;
    }

    // 允许的MIME类型数组和扩展名数组
    if(!$allowed_types){
        $allowed_types = ['image/jpeg', 'image/png', 'image/gif', 'application/vnd.ms-excel'];
    }

    if(!$allowed_extensions){
        $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'xls'];
    }

    // 检查MIME类型和扩展名是否都在允许的列表中
    if (in_array($mime_type, $allowed_types) && in_array($extension, $allowed_extensions)) {
        return true;
    } else {
        return false;
    }

}


http://www.kler.cn/a/539700.html

相关文章:

  • 项目6:基于大数据校园一卡通数据分析和可视化
  • redis底层数据结构——简单动态字符串
  • Bash (Bourne-Again Shell)、Zsh (Z Shell)
  • 在 Ubuntu 上安装 MySQL 的详细指南
  • docker学习笔记
  • Level DB --- Iterator
  • 【如何掌握CSP-J 信奥赛中的广搜算法】
  • 【每日一题 | 2025】2.3 ~ 2.9
  • Git 功能分支工作流程是如何支持社交化编程
  • 通过案例讲述docker,k8s,docker compose三者的关系
  • springboot005学生心理咨询评估系统
  • nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug
  • 汽车售后诊断软件手机端架构设计
  • STM32自学记录(九)
  • Docker、Ollama、Dify 及 DeepSeek 安装配置与搭建企业级本地私有化知识库实践
  • 【前端】打造自己的hexo博客_hexo一本通
  • MySQL的 MVCC详解
  • SpringCloud面试题----Nacos和Eureka的区别
  • 消费情境变迁下的创新商业模式探索:以开源AI智能名片2+1链动模式S2B2C商城小程序为例
  • 【AIGC】语言模型的发展历程:从统计方法到大规模预训练模型的演化
  • 上位机知识篇---AI问答技巧
  • Formily 如何进行表单验证
  • C#中的非托管资源释放机制详解|Finalizer与Dispose模式
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(九)-连号区间数、递增三元组
  • git连接——问题
  • 第3章 使用 Vue 脚手架