0x00 起源

从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,需要有简单的html基础和php基础,跟随流沙前辈视频学习记录。

国庆放假摆烂几日,奖励自己好多把亚索,嘿嘿嘿,今日继续对php基础学习。

0x01  文件包含的简单例子

文件包含是高危漏洞,如果代码处理不好,就有可能对网站产生隐患。之前也对该漏洞作出记录。但现阶段目的是实现php代码审计入门,所以在原有基础上进一步理解原理。

文件包含漏洞使用特定函数把别的文件包含进来。

include     包含过程出错,报错但继续执行

include_once()  不会二次包含

require()   包含过程出错,直接退出不继续执行

require_once()  不会二次包含

代码一 2-9.php
<?php   //PHP 文件管理操作一-文件包含$conn = array("host" => "localhost","mysql" => "localhost","port" => "3306","database" => "testdb");代码二 t3.php
<?phpecho "www.baidu.com<br/>";include '2-7.php';          //注意,此处2-7.php文件是不存在的,让它报错;这里先测试require//include、require函数可以理解为调用,等价于把代码一的$coon那一段代码调用到此处$host = $conn["port"];      //输入port数据,正常为3306,但是此处文件是2-7.phpecho $host;echo "xxaadqawd";           //下面添加回显内容,用于对比include和require

测试include可以看到使用include包含2-7.php,虽然2-7.php不存在导致过程出错,但还是正常执行下面的echo命令

测试require发现不错但不继续执行,这两者的区别就再此处体现

0x02  文件上传的简单例子

开始前要做的准备

1.首先是有关目录创建的小栗子,下面代码的核心逻辑为判断当前目录是否存在,不存在自己创建

//创建目录的代码段
<?php  //echo __DIR__. "<br/>";   //输出当前路径//echo dirname(__DIR__);   //输出上级目录//现在我们有一个情况,在上级目录下新建路径/uploads/imagesdefine("PATH",dirname(__DIR__));$path = PATH."/"."uploads"."/images";      //定义path,判断上级目录是否为uploads/images 等价于 ../uploads/images$dir1 = date("Ym");     //年月$dir2 = date("d");      //日$fullPath = $path."/".$dir1.$dir2;   //拼接完整路径if(is_dir($fullPath)){    //判断指定的文件是否是目录echo "yes";         //是输出yes}else{//    echo "no";      不是目录,使用mkdir函数创建路径mkdir($fullPath,0777,true);    //创建路径,赋予文件权限}

首先自己先创建uploads/images路径,上传的图片都会上传到这个路径,可以看到正常情况下是空的。

但是当代码判断为否时,会在images路径根据当前年月日创建文件夹

2.结合1实现上传代码,文件上传要用到函数 move_uploaded_file,该函数用来移动图片路径

<?php    header("Content-type:text/html;charset=utf-8");    //因为下面有中文,不输入可能会存在问题if(empty($_FILES)){echo "请上传文件";}else{//echo $_FILES["picture"]["name"]."<br/>";//echo $_FILES["picture"]["tmp_name"];define("PATH",dirname(__DIR__));$path = PATH."/"."uploads"."/images";     $dir1 = date("Ym");    $dir2 = date("d");     $fullPath = $path."/".$dir1.$dir2;   if(is_dir($fullPath)){    echo "yes";          }else{//    echo "no";      mkdir($fullPath,0777,true);      }$fileName = rand(10000,99999);   //上传的图片文件名给予5位随机数,从10000-99999$fileType = strrchr($_FILES["picture"]["name"],".");$fileName = $fileName.$fileType; move_uploaded_file($_FILES["picture"]["tmp_name"],$fullPath."/".$fileName);  //把html表单上传的文件移动到所需的目录;类比把客户端输入的图片移动到服务器
}

3.前端的上传代码实现

<!DOCTYPE htnl>                <!--文件上传表单-->
<html>
<head><meta  charset="utf-8"><title>测试文件上传</title>
</head>
<body>
<form  action="t3.php" method="post" enctype="multipart/form-data">  <!--文件上传需要加上enctype="multipart/form-data"--><input type="file" name="picture"/><input type="submit"/>
</form>
</body>
</html>

在html页面上传1.jpg,最终实现的上传到图片服务器的为随机数20126.jpg,当然实际网站不可以这样写。

0x03  文件管理

unlink()          删除文件

realpath(".")  等价于__dir__输出当前路径

file_get_contents()    从文件中读取内容

file_put_contents()    向文件中写入内容

file_get_contents读取文件内容小例子

<?phpheader("Content-type:text/html;charset=utf-8");$str = file_get_contents("t5.php");var_dump($str);

使用递归思想的小栗子

<?phpheader("Content-type:text/html;charset=utf-8");/*$path 目录$lev 层级*/function showDir($path,$lev=0){$fh = opendir($path);while($row = readdir($fh)){//如果目录为.和..就跳过if(($row=='.') || ($row=='..')){continue;}echo str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;",$lev),$row,'<br/>';//如果目录里面还有目录,就继续往下读取目录if(is_dir($path.'/'.$row)){showdir($path.'/'.$row,$lev+1);}}closedir($fh);}showDir('.');  //输出当前目录下的文件

php入门-文件操作(文件包含、文件上传、文件管理)相关推荐

  1. EasyExcel实现文件读取、导出、上传、下载操作

    一.EasyExcel简介 ​     Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度 ...

  2. [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. Java编程那些事儿——文件操作之写文件

    Java编程那些事儿--文件操作之写文件 Java, Java培训, Java基础, Java学习, Java教程 11.3.1.4 写文件 如前所述,将程序内部的数据输出到程序外部的数据源,应该使用 ...

  4. ajax上传 java_使用Ajax进行文件与其他参数的上传功能(java开发)

    文件上传: 记得前一段时间,为了研究Ajax文件上传,找了很多资料,在网上看到的大部分是form表单的方式提交文件,对于Ajax方式提交文件并且也要提交表单中其他数据,发现提及的并不是很多,后来在同事 ...

  5. 【Python】文件操作(单文件操作)

    目录 一.文件操作概述: 二.文件基本操作: 文件操作步骤: 1.打开文件: 2.对文件进行读写操作: 3.关闭文件的输入输出流: demo: 文件访问模式: 基础访问模式特点: 读取操作: 1.re ...

  6. 上传excel文件到服务器,excel怎么上传到云服务器

    excel怎么上传到云服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安 ...

  7. 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)

    读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...

  8. C文件操作、读写文件 C++文件读写、文件操作

    转自  飘羽随风 基于C的文件操作  在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FI ...

  9. JavaScript上传大文件并支持中途取消上传

    最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  10. vba 文件操作服务器,VBA文件及文件夹操作

    VBA文件及文件夹操作 1.VBA操作文件及文件夹 on error resume next下测试 A,在D:\下新建文件夹,命名为folder 方法1:MkDir "D:\folder&q ...

最新文章

  1. 近期上海面试总结(一)
  2. Spring Boot + Elasticsearch
  3. 穿过代理服务器取远程用户真实IP地址
  4. 项目分发系统-expect
  5. matlab九节点网络仿真问题,三机九节点电力系统仿真matlab.docx
  6. 大学c语言程序设计期末考试试卷,大学大一c语言程序设计期末考试试卷及答案.doc...
  7. 用Python做一个简单的翻译工具
  8. 应用容器Application container
  9. java 与 .net socket_java.net.ServerSocket和java.net.Socket
  10. ajax 传送很多html字符串到前台例子
  11. HFSS器件导入Altium 教程
  12. 百度文库免费下载方法
  13. magic,imagesc,drawnow
  14. SpringMVC文件上传和Jwt身份验证
  15. java控制小数位数_java中怎么控制double的小数位数?
  16. pandas写入excel指定行_使用pandas操作excel
  17. 2020年美容师(初级)多少钱及美容师(初级)模拟考试题库
  18. C语言习题:输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出所有分数中最高分
  19. labelme_json_to_dataset报错: ModuleNotFoundError: No module named ‘labelme
  20. 北航计算机考博经验,北航考博经验总结和感受

热门文章

  1. 《计算机网络》笔记-第3章运输层
  2. UnityShader学习笔记 Unity的表面着色器
  3. spring事务失效了? @Transactional不管用了 ?看看这些@Transation的坑
  4. 经度从0-360更改为-180到180
  5. Duplicate class com.amap.api.fence.DistrictItem found in modules jetified-3dmap-9.3.1.jar (com.amap.
  6. hashmap hash冲突怎么解决_10个HashMap问题搞定面试官
  7. 3G单兵构建现代化应急指挥系统
  8. Python安装和运行
  9. 学习 Civil 3D二次开发从哪儿开始?
  10. 为什么插入HDMI线,电脑的音响就没有声音了