php开发-个人博客项目文件操作类编辑器上传下载删除读写

本文主要是介绍php开发-个人博客项目文件操作类编辑器上传下载删除读写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

特地整了个软件

这就舒服了

文件操作类的开发

文件的任意上传,下载,读取,删除操作等

1.文件上传类-任意文件上传

分为三类

1,代码自主编写的

先写一个html的上传表单,这个网上搜索就有

标题看着不够明确啊,在加个标题  h1

html用来构造前端的接受界面,然后在用php去处理

$_FILES数组内容如下: 
$_FILES['myFile']['name'] 客户端文件的原名称。 
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。 
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量) 

随便上传一个文件,就看到了刚刚获取到的信息

能正常接收之后在创建一个接受图片存放文件夹,就命名upload吧

//ove_uploaded_file移动文件的函数,第一改是要移动的文件
//第二个是要移动到那个目录,以及命名

提示成功,也有位置回显

这是没有任何拦截的情况下,但现实中都有拦截的,我们再加些检测的代码

判断类型是否是jpeg,不是就输出文件类型不支持

上传不同类型的文件就会不支持

2,编译器引用造成的

第二中类型,就是网站引用了编译器,很多网站都引用编译器的

编译器简单就是第三方应用,一个小软件,继承了一些功能,不用敲代码打出来了

 源码下载地址

Release 发布 v1.4.3.3 · fex-team/ueditor · GitHub

直接复制粘贴网上的代码

上面就多了一个编译器

当引用了编译器。如果编译器没有漏洞,就没有办法进行文件上传,编译器是引用的第三方别人写好的,不是博主自己写的代码,如果编译器有漏洞,博主的网站就有漏洞

3,框架类上传漏洞

出现漏洞的问题

1.自写代码验证上传 //验证核心在代码里面

2.引用外部编译器实现,//验证核心在编译器里面

3.引用开发框架实现,//验证核心在代码框架里面


1.文件上传类-任意文件上传

下载方式分为两种,一种是直连下载,如http://www.xiaodi.com/data.zip

一种是传参下载,如http://www.xiaodi.com/down.php?filename=data.zip

直连下载

访问目录就看到了这里的内容

然后可以通过数组遍历把这里面的东西取出来

取出我们要下载的东西

现在在构造一个下载函数,下载函数哪里就用到了$_sever函数,获取一些分为信息构造分为的url

构造好输出的url就是一个正常的url

传参的话就写成这样

接受变量name,并把变量传递到url里面组成,name就是用户可控的变量就可以自己输出想下载内容

html接受post提交的name值。传递给变量name,在写给url,就构造出来url

最后在补全代码测试下载效果

就会自动提示下载

直连下载代码过程html表单接受post提交的数据,传参给下载函数,创造出下载的url,重定向到那个函数下载

这是直连下载

相对直连下载的安全问题就很小,因为直连下载是因为分为的zip文件,zip文件的协议不同会直接下载,不会触发浏览器的自动下载,而访问php文件就会直接执行php,并不会下载

传参下载

而传参下载是功能下载,传参会读取文件夹的所有内容,这时候在访问文件夹里面的文件不会收到协议什么的影响,访问什么,就下载什么,访问php也是下载,所以传参下载会有安全问题

 1.文件上传类-任意文件删除

文件的删除代码对文件下载稍微改几个字即可,然后写一个文件删除的函数

文件删除代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>文件删除操作</title></head>
<body>
<hr>
<h1>文件删除</h1>
<?php getfilename();?>
<form action="" method="post" enctype="multipart/form-data"><input type="text"  name="name" /> <br /><input type="submit" value="删除文件" />
</form>
<?php $name=$_POST['name'];delfilename($name);?><br />
<?php getfilename();?>
<form action="" method="post" enctype="multipart/form-data"><input type="text"  name="dir" /> <br /><input type="submit" value="删除文件夹" />
</form>
<h1>文件夹删除</h1>
<?php $dir=$_POST['dir'];deifiledir($dir);?>
</body>
</html><?php
function getfilename()
{  //function 声明函数。后面是命名$filepath = getcwd();  //读取当前目录$filename = scandir($filepath);  //扫描指定目录foreach ($filename as $value) { //foreach数组遍历方法if ($value != '.' && $value != '..') {$arr[] = $value;echo $value . '<br>';}}
}
function delfilename($name){unlink($name); //删除文件
}
function deifiledir($dir){rmdir($dir); //删除文件夹
}

不过这个只能删除本目录的,就代码所在的目录

输出1.txt

就没了

经测试发现删除文件夹需要文件夹是空的才可以使用这个代码删除

 1.文件上传类-任意文件读取写入

还是那段html代码改几个字就好

读到的结果是3

写入文件也是成功写入

代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>文件读写操作</title></head>
<body>
<hr>
<?php getfilename();?>
<h1>文件读取</h1>
<form action="" method="post" enctype="multipart/form-data"><input type="text"  name="name" /> <br /><input type="submit" value="读取文件" />
</form>
<?php $name=$_POST['name'];getfileread($name);?><br />
<h1>文件写入</h1>
<form action="" method="post" enctype="multipart/form-data">需要写入的文件:<input type="text"  name="name" /> <br />需要写入的代码:<input type="text"  name="txt" /> <br /><input type="submit" value="写入文件" />
</form>
<?php $name=$_POST['name'];$txt=$_POST['txt'];filewrite($name,$txt);?><br /></body>
</html><?php
function getfilename()
{  //function 声明函数。后面是命名$filepath = getcwd();  //读取当前目录$filename = scandir($filepath);  //扫描指定目录foreach ($filename as $value) { //foreach数组遍历方法if ($value != '.' && $value != '..') {$arr[] = $value;echo $value . '<br>';}}
}
function getfileread($name){$file = fopen("$name","r"); //fopen打开文件函数,r是模式,r的意思是只读echo $contents = fread($file,filesize("$name")); //输出一下读取的内容fclose($file);
}
function filewrite($name,$txt){$myfile = fopen("$name","a+"); //fopen打开文件函数,a+是模式,a+的意思是写入,如果没有写入的文件就创建再写入fwrite($myfile,$txt);fclose($myfile);
}

这些漏洞产生的前提一定要有一个可控的参数,不然就不会有漏洞,比如直连下载根本没有可控的参数,怎么产生漏洞

文件包含漏洞

漏洞函数

include

1.txt的内容是phpinfo()

而访问这个php文件就会展示phpinfo的界面

文件包含漏洞又分远程包含和本地包含,这里是固定参数的,如果那个包含的文件名字是我们可控的参数就可以尝试文件包含漏洞,远程包含漏洞可以直接去执行别的网站的文件,自己开一个服务器,自定义个反弹shell文件去远程包含,那危害相当大

include之外require也可以是文件包含的漏洞函数

漏洞成因

可控的参数

漏洞函数-函数的多样化

ping

an

这篇关于php开发-个人博客项目文件操作类编辑器上传下载删除读写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974511

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加