安全开发-PHP应用文件管理模块显示上传黑白名单类型过滤访问控制文件管理模块包含上传遍历写入删除下载安全

news2025/2/3 21:47:55

文章目录

  • 文件管理模块-上传-过滤机制
  • 文件管理模块-显示-过滤机制
  • PHP文件操作安全
  • 文件包含
  • 文件上传
  • 文件删除
  • 文件下载
  • 文件编辑

文件管理模块-上传-过滤机制

$_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息。
$_FILES[“表单值”][“name”] 获取上传文件原始名称
$_FILES[“表单值”][“type”] 获取上传文件MIME类型
$_FILES[“表单值”][“size”] 获取上传文件字节单位大小
$_FILES[“表单值”][“tmp_name”] 获取上传的临时副本文件名
$_FILES[“表单值”][“error”] 获取上传时发生的错误代码
move_uploaded_file() 将上传的文件移动到指定位置的函数

1、无过滤机制

$name=$_FILES['f']['name'];
$type=$_FILES['f']['type'];
$size=$_FILES['f']['size'];
$tmp_name=$_FILES['f']['tmp_name'];
$error=$_FILES['f']['error'];

echo $name."<br>";
echo $type."<br>";
echo $size."<br>";
echo $tmp_name."<br>";
echo $error."<br>";
if(move_uploaded_file($tmp_name,'upload/'.$name)){
    echo "文件上传成功!";
}

在这里插入图片描述
2、黑名单过滤机制

//上传文件后缀过滤 黑名单机制
$black_ext=array('php','asp','jsp','aspx');
//xxx.jpg xxx.png
$fenge = explode('.',$name);
$exts = end($fenge);
if(in_array($exts,$black_ext)){
    echo '非法后缀文件'.$exts;
}else{
    move_uploaded_file($tmp_name,'upload/'.$name);
    echo '<script>alert("上传成功")</script>';
}

在这里插入图片描述
3、白名单过滤机制

$allow_ext=array('png','jpg','gif','jpeg');
//xxx.jpg xxx.png
$fenge = explode('.',$name);
$exts = end($fenge);
if(!in_array($exts,$allow_ext)){
    echo '非法后缀文件'.$exts;
}else{
    move_uploaded_file($tmp_name,'upload/'.$name);
    echo '<script>alert("上传成功")</script>';
}

4、文件类型过滤机制
Content-Type: application/octet-stream 改为 Content-Type: image/png
在这里插入图片描述

文件管理模块-显示-过滤机制

<?php
$dir = $_GET['path'] ?: './';
//1.打开目录,读取文件列表 opendir
//2.循环读取文件列表 while readdir
//3.判断是文件还是文件夹 is_dir

//打开目录,读取文件列表 opendir
function filelist($dir){
    if($dh = opendir($dir)){
        //循环读取文件列表 while readdir
        while(($file=readdir($dh) )!== false){
            //判断是文件还是文件夹 is_dir
            if(is_dir($file)){
                echo "<li><i class='fa fa-folder'></i> <a href='?path=$file'>" . $file . '</a></li>';
            }else{
                echo '<li><i class="fa fa-file"></i> <a href="#">' . $file . '</a></li>';
            }
        }
    }
}
filelist($dir);
function del($file){
    if(!is_dir($file)){
        unlink($file);
        echo "<script>alert('删除成功')</script>";
    }
}
if(isset($_GET['del'])){
    del($_GET['del']);
}
function down($filepath){
    $fileName = basename($filepath);
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"" . $fileName . "\"");
    header("Content-Length: " . filesize($filepath));
    readfile($filepath);
}
if(isset($_GET['down'])){
    down($_GET['down']);
}
?>

功能:显示 上传 下载 删除 编辑 包含等
1.打开目录读取文件列表
在这里插入图片描述
2.递归循环读取文件列表
3.判断是文件还是文件夹
4.PHP.INI目录访问控制
在这里插入图片描述开启后将网站根目录设置为D:\phpStudy\PHPTutorial\WWW\blog,无法利用进行目录遍历
在这里插入图片描述

is_dir() 函数用于检查指定的路径是否是一个目录
opendir() 函数用于打开指定的目录,返回句柄,用来读取目录中的文件和子目录
readdir() 函数用于从打开的目录句柄中读取目录中的文件和子目录
open_basedir:PHP.INI中的设置用来控制脚本程序访问目录

PHP文件操作安全

-文件包含,文件上传,文件下载,文件删除,文件写入,文件遍历

文件包含

include() 在错误发生后脚本继续执行
require() 在错误发生后脚本停止执行
include_once() 如果已经包含,则不再执行
require_once() 如果已经包含,则不再执行

文件上传

架构:
1、上传至服务器本身的存储磁盘(源码在一起)
2、云产品OSS存储对象去存储文件(泄漏安全)
这个技巧挖src还是挺管用的
阿里云中oss云存储资源需要购买(好处就是无脚本执行环境 降低安全风险)
在这里插入图片描述
当然关于这方面的利用就是通过前端源码泄露的ak/sk,利用OSS浏览器、行云管家等工具进行bucket接管
在这里插入图片描述
附上刚出的漏洞
在这里插入图片描述
多说几句:一般web应用就是通过找一些静态资源泄露,小程序就是反编译找关键词,APP同样也是反编译(脱壳、adb、frida、xpose)……这是可以讲的麽

3、把文件上传到其他域名,如:www.xiaodi8.com->upload.xiaodi8.com

文件删除

unlink() 文件删除函数
调用命令删除:system shell_exec exec等

文件下载

修改HTTP头实现文件读取解析下载:
header(“Content-Type: application/octet-stream”);
header(“Content-Disposition: attachment; filename=”");
header("Content-Length: " . filesize( f i l e ) ) ; r e a d f i l e ( file)); readfile( file));readfile(file);

文件编辑

1、file_get_contents() 读取文件内容
2、fopen() fread() 文件打开读入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 OpenVINO 的目标识别

基于 OpenVINO 的目标识别 YOLOV5原理 YOLOv5是一种快速高效的目标检测算法&#xff0c;具有优秀的实时性能和较高的准确度。该算法利用深度学习技术实现了端到端的目标检测&#xff0c;在计算资源有限的情况下也能够获得出色的表现 YOLOv5采用了一种基于Anchor的检测方式&…

广西电网:筑牢数字化安全根基,推动新型能源体系建设

广西电网是南方电网的全资子公司&#xff0c;是广西地区内资产规模数一数二的特大型企业。一直以来&#xff0c;广西电网都积极探索深化数字化绿色化协同&#xff0c;深入推进数字电网建设&#xff0c;构建新型电力系统和新型能源体系。 国家政策提出要求 以安全保障数字纽带 …

postman常用操作说明

环境变量 环境变量就是我们存放一组公共数据的地方&#xff0c;比如我有100个接口&#xff0c;三套环境(开发环境、测试环境、生产环境)&#xff0c;我们没有必要把这100个接口根据三个环境分别写一套用例。只需要维护一套用例脚本&#xff0c;然后设置对应三个环境的变量就行…

抗性宏基因组揭秘人和动物共享ARG以及ARG的转移能力

抗生素耐药性&#xff08;Antibiotic Resistance&#xff09;是全球日益严重的公共卫生问题&#xff0c;随着“同一健康”概念的提出&#xff0c;人们更追求人、动物和环境的最佳健康。动物服用抗生素后会在其内脏中产生抗药细菌&#xff0c;并留在动物体内&#xff0c;最终可能…

MIT 6.829 -- Lecture 1: Packet Switching

MIT 6.829 -- Lecture 1: Packet Switching 引言InterconnectionsCircuit SwitchingPacket SwitchingDatagram routingSource routingVirtual circuits An example&#xff1a;LAN SwitchingLearning bridgesThe Solution&#xff1a;Spanning TreesVirtual LANs Summary 本课程…

PS图层混合模式超详细解答-图层混合模式的原理(Part1)

PS图层混合模式超详细解答-图层混合模式的原理 ☕ 前言 本教程非常详细&#xff0c;请用心看完 本教程如果有如何问题&#xff0c;欢迎评论区留言讨论 本教程为了避免冗余&#xff0c;一些不必要的截图就省略了 本教程只讨论8bit的情形下的混合 未经许可&#xff0c;不可转…

3.7 Bootstrap 导航栏

文章目录 Bootstrap 导航栏响应式的导航栏导航栏中的表单导航栏中的按钮导航栏中的文本结合图标的导航链接组件对齐方式固定到顶部固定到底部静态的顶部反色的导航栏 Bootstrap 导航栏 导航栏是一个很好的功能&#xff0c;是 Bootstrap 网站的一个突出特点。导航栏在您的应用或…

详解GPT技术发展脉络

文章目录 前言关于本篇的分享内容大语言模型大模型语言模型 百花齐放TransformerAuto-RegressiveResnetLayer-NormMaskScaled Dot-Product AttentionMulti-Head AttenionSelf-AttentionPositional Encoding关于并行计算关于长程依赖Transformer演化 GPT SeriesGPT-1GPT-2GPT-3 …

STM32存储左右互搏 I2C总线读写EEPROM AD24C02

STM32存储左右互搏 I2C总线读写EEPROM AD24C02 在较低容量存储领域&#xff0c;EEPROM是常用的存储介质&#xff0c;不同容量的EEPROM的地址对应位数不同&#xff0c;在发送字节的格式上有所区别。EEPROM是非快速访问存储&#xff0c;因为EEPROM按页进行组织&#xff0c;在连续…

数据库查询速度上不去的查询和分析

主要原因 数据库查询速度上不去、阻塞是指在并发访问 MySQL 数据库时,某个事务占用了资源并且长时间不释放,导致其他事务无法执行或执行缓慢的情况。MySQL 阻塞可能会导致数据库性能下降,甚至出现死锁等问题,需要马上进行处理。在 MySQL中,线程阻塞可能是由于以下原因导致…

vite 启动项目 报错 spawnargs: [ ‘--service=0.12.15‘, ‘--ping‘ ]

当前项目使用的是 vue3-antd-admin 框架 vue3-antd-admin 框架 详细地址 我们运行项目的时候发现报以下错误&#xff0c;npm i 了也不行, node:events:504throw er; // Unhandled error event^Error: spawn C:\Users\DELL\Desktop\vue3-antd-admin-master\node_modules\esbu…

阿里国际、敦煌、速卖通、沃尔玛、TEMU做测评补单核心关键点,看完你就会了

现在不管是做国内电商还是跨境电商&#xff0c;测评补单一直都有人在做&#xff0c;也确确实实的给卖家们带来了突破&#xff0c;不管是订单&#xff0c;留评&#xff0c;权重等等都有很大的提升&#xff0c;可以说有电商的地方就有测评补单&#xff0c;这是刚需。但是就像前人…

【C语言】深入理解C语言数据类型:从结构体到共用体和枚举的全面解析

目录 一、结构体概述及定义 1、概念 2、定义方式 方式1&#xff1a;先定义结构体类型&#xff0c;再定义结构体变量 方式2&#xff1a;定义结构体类型的同时定义结构体变量 方式3&#xff1a;定义一次性结构体 二、结构体变量的初始化 1、一般初始化 2、清空结构体变量…

【正点原子STM32连载】 第五十六章 DSP测试实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第五…

欧姆龙cp11以太网设置

捷米特JM-ETH-CP转以太网模块控&#xff0c;用于欧姆龙 CP1L/ CP1E/ CP1H 系列 PLC 的以太网数据采集&#xff0c;非常方便构建生产管理系统。 支持 FINS/UDP、FINS/TCP 以太网协议通信&#xff0c;支持上位机软件&#xff08;组态王、MCGS、力控、KepWare OPC 服务器等&#…

leetcode2373. 矩阵中的局部最大值

https://leetcode.cn/problems/largest-local-values-in-a-matrix/ 给你一个大小为 n x n 的整数矩阵 grid 。 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵 maxLocal &#xff0c;并满足&#xff1a; maxLocal[i][j] 等于 grid 中以 i 1 行和 j 1 列为中心的 3 x 3 矩阵中…

【Android】报错java.lang.reflect.InvocationTargetException解决办法

报错信息&#xff1a;java.lang.reflect.InvocationTargetException反射层调用方法失败 结果图 原因 InvocationTargetException异常由Method.invoke(obj, args…)方法抛出。(反射异常) 当被调用的方法的内部抛出了异常而没有被捕获时&#xff0c;将由此异常接收&#xff01;&…

Stable Diffusion如何生成高质量的图-prompt写法介绍

文章目录 Stable Diffusion使用尝试下效果prompt的编写技巧prompt 和 negative promptPrompt格式Prompt规则细节优化Guidance Scale 总结 Stable Diffusion Stable Diffusion是一个开源的图像生成AI系统,由Anthropic公司开发。它基于 Transformer模型架构,可以通过文字描述生成…

查询每年最新的数据

1.最近在工作中遇到了一个需求,要求查询出每个党组织每年最新的数据 2.使用的sql语句为: SELECTCREATED_TIME,party_org_id,id FROMbranch_book WHERECREATED_TIME IN ( SELECT MAX( CREATED_TIME ) AS CREATED_TIME FROM branch_book GROUP BY DATE_FORMAT( year, %Y ), pa…

移动云发布医疗行业白皮书,构建全民健康数字化枢纽

医疗卫生改革正在深入推进&#xff0c;全民健康信息化建设也在加速进行。医疗云作为医疗卫生数字化转型的基础性平台&#xff0c;正引起越来越多的关注和探讨。近日&#xff0c;由中国移动集团政企事业部牵头发起&#xff0c;移动云联合IDC中国重磅发布《建设医疗云平台&#x…