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

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件