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

Web开发-PHP应用文件操作安全上传下载任意读取删除目录遍历文件包含

知识点:
1、安全开发-原生PHP-文件安全操作
2、安全开发-原生PHP-上传读取删除包含等
3、安全开发-原生PHP-代码审计文件安全

一、演示案例-WEB开发-文件安全-上传下载读取

文件上传

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

文件下载

修改HTTP头实现文件读取解析下载:
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . $file . "\"");
header("Content-Length: " . filesize($file));
readfile($file);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文件读取

1、file_get_contents() 读取文件内容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、fopen()、fread() 文件打开读入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、演示案例-WEB开发-文件安全-删除遍历包含

文件删除

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

在这里插入图片描述

文件显示(目录遍历)

1.打开目录读取文件列表
2.递归循环读取文件列表
3.判断是文件还是文件夹
4.PHP.INI目录访问控制

is_dir() 函数用于检查指定的路径是否是一个目录

opendir() 函数用于打开指定的目录,返回句柄,用来读取目录的文件和子目录

readdir() 函数用于从打开的目录句柄中读取目录中的文件和子目录

在这里插入图片描述
在这里插入图片描述

open_basedir:PHP.INI中的设置用来控制脚本程序访问目录

scandir() 函数返回指定目录中的文件和目录列表,以数组形式返回

在这里插入图片描述

ini_set(‘open_basedir’,DIR); 设置配置文件中,只能访问本目录

文件包含

在这里插入图片描述

include

在这里插入图片描述
在这里插入图片描述

require

在这里插入图片描述
在这里插入图片描述

include_once

在这里插入图片描述
在这里插入图片描述

require_once

三、演示案例-WEB开发-文件安全-代码审计案例

1、Rrzcms-遍历读取

https://xz.aliyun.com/t/10932
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

黑盒角度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

白盒角度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、Metinfo-文件下载

https://mp.weixin.qq.com/s/te4RG0yl_truE5oZzna3Eg
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、Xhcms-文件包含

https://xz.aliyun.com/t/11310
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/74759.html

相关文章:

  • 字符串p型编码(信息学奥赛一本通-1145)
  • 理解我们单片机拥有的资源
  • 【操作系统安全】任务4:Windows 系统网络安全实践里常用 DOS 命令
  • linux系统——创建swap分区和移除磁盘
  • ftp替代品,如何提升数据交换的安全性与高效性?
  • css3有哪些新属性
  • 它,让机器人与HMI屏无缝对接
  • STM32输入捕获采集超声波模块HC-SR04响应的高电平
  • 问deepseek: 如何处理CGNS网格文件里,多个zone之间的链接数据
  • Java:引用其他类的方法
  • 09-ArcGIS For JavaScript -- 基于ThreeJS实现动态GLTF模型加载
  • 如何在AI时代处理 PDF
  • RabbitMQ 全面详解(附面试重点)
  • 【第15届蓝桥杯】软件赛CB组省赛
  • 微服务存在的问题及解决方案
  • Docker基础知识介绍
  • 基于SpringBoot+Vue的电商应用系统的设计与实现(代码+数据库+LW)
  • 【Linux系列】文件压缩
  • 深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发
  • golang-struct结构体
  • C3P0数据库连接池技术详解及实战
  • Node.js系列(1)--架构设计指南
  • C语言中的结构体数组
  • JSON.stringify()可以转换哪些类型?
  • 【AI 大模型】RAG 检索增强生成 ⑤ ( 向量数据库 | 向量数据库 索引结构和搜索算法 | 常见 向量数据库 对比 | 安装并使用 向量数据库 chromadb 案例 )
  • LeetCode算法题(Go语言实现)_02
  • Hive SQL 精进系列:REGEXP_COUNT 函数的用法
  • 处理流程设计、系统设计、人机界面设计(高软48)
  • 2024年消费者权益数据分析
  • Vue3.5 企业级管理系统实战(九):菜单组件