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

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc