小迪安全 第13天:php开发-个人博客项目&文件操作类&编辑器&上传下载删除读写

一、知识点

1.文件操作类代码编写

2.文件上传&下载&删除

任意文件上传    任意文件下载        任意文件删除

1.代码自主写     1.直连URL访问     1.文件删除

2.编辑器引用     2.传参头部修改      2.文件夹删除

3.文件内容&读取&写入

4.第三方编辑器引用实例

二、文件上传类

1.代码自主写

①在www/blog路径下创建一个file文件夹,新建一个file-upload.php

②搜索“HTML 上传表单”,html构造一个显示的页面,php用来接收我上传的文件并把文件进行处理

搜索“PHP $_FILES”变量用法

 

 在上传文件后会输出文件名、类型、大小等

③move_uploaded_file() 函数

 

 基于(类型,格式)验证来判断是否有文件上传漏洞!!!

2.编辑器引用

Ueditor:第三方软件小应用

①把ueditor文件夹复制到file目录下,加入这几行代码

②可以实现文件上传

 3.二者区别

1.自写代码上传:自己测试

2.外部编辑器实现:核心代码在编辑器里,是编辑器进行验证,若编辑器过滤很好就没办法了

3.框架类实现:如thinkphp框架,和编辑器类似,都是别人写好的代码封装在一起,要实现什么功能直接调用,核心代码由对方决定,而不是你自己决定

三、文件下载类

在file目录下新建file_down.php

直连下载;http://www.xiaodi8.com/soft/软件.zip

传参下载:http://www.xiaodi8.com/soft/down.php?filename=软件.zip

一般访问网站,有的网站功能里有文件下载

1.直连下载

①soft文件夹放入file目录下

 

 ②PHP数组取值

 ③直连下载

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>

<body>

<h1>直连下载</h1>
<?php getfilename();?>
<form action="" method="post">
    需要下载的文件<input type="text" name="name">
    <input type="submit" value="下载">
</form>
<?php $name=$_POST['name'];geturldown($name);?>

<h1>传参下载</h1>

</body>
</html>



<?php
function getfilename()
{
    $filepath = getcwd();//获取当前脚本目录
    $filename = scandir($filepath . '/soft');
    //var_dump($filename);//打印
    foreach ($filename as $value){
        if ($value != '.' && $value != '..') {
            $arr[] = $value;
            echo $value.'<br>';
    }
        }
}
function geturldown($name){
    $url='http://'.$_SERVER['HTTP_HOST'].'blog/file/soft/'.$name;
     //echo $url;
    header("location: $url");//直接重定向到这个地址
}
?>

 2.传参下载

function getdown($name){
     $filename = $name;
    $download_path = "soft/";
    if(eregi("\.\.", $filename)) die("抱歉,你不能下载该文件!");
    $file = str_replace("..", "", $filename);
    if(eregi("\.ht.+", $filename)) die("抱歉,你不能下载该文件!");

// 创建文件下载路径
    $file = "$download_path$file";

// 判断文件是否存在
    if(!file_exists($file)) die("抱歉,文件不存在!");

//  文件类型,作为头部发送给浏览器
    $type = filetype($file);

// 获取时间和日期
    $today = date("F j, Y, g:i a");
    $time = time();

// 发送文件头部
    /*
    header("Content-type: $type");
    header("Content-Disposition: attachment;filename=$filename");
    header("Content-Transfer-Encoding: binary");
    header('Pragma: no-cache');
    header('Expires: 0');
    */
// 发送文件内容
    set_time_limit(0);
    readfile($file);

}

3.总结

直连下载是安全的,只能下载zip,exe之类支撑协议的才能下载(由中间件决定)

传参下载有安全问题,如果更改参数可能会下载php文件

四、文件删除类

文件/文件夹

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件删除</title>
</head>
<body>
<h1>文件删除</h1>
<?php getfilename(); ?>
<form action="" method="post">
    需要删除的文件:<input type="text" name="filename">
    <input type="submit" value="删除">
</form>
<?php @$name=$_POST['filename'];filedel($name);?>
<h1>文件夹删除</h1>
<?php getfilename()?>
<form action="" method="post">
    需要删除的文件夹:<input type="text" name="filedir">
    <input type="submit" value="删除">
</form>
<?php @$dir=$_POST['filedir'];filedeldir($dir);?>
</body>
</html>


<?php
function getfilename(){
    $dir=getcwd();
    $file=scandir($dir);
    foreach ($file as $value){
        if($value != '.' && $value != '..') {
            $arr[] = $value;
            echo $value.'<br>';
        }
    }
}
//自定义文件删除函数
function filedel($name){
    @unlink($name);
}
//自定义文件夹删除函数
function filedeldir($dir){
    @rmdir($dir);
}
?>

unlink()删除文件

rmdir()删除文件夹

五、文件操作类

 打开文件的模式_文件打开模式-CSDN博客

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件内容操作</title>
</head>
<body>
<h1>文件列表</h1>
<?php getfilename(); ?>

<h1>读取操作</h1>
<form action="" method="post">
    需要读取的文件<input type="text" name="r">
    <input type="submit" value="读取">
</form>
<?php @$name=$_POST['r'];fileread($name);?>
<h1>写入操作</h1>
<form action="" method="post">
    文件:<input type="text" name="w">
    内容:<input type="text" name="txt">
    <input type="submit" value="写入">
</form>
<?php @$name=$_POST['w'];@$txt=$_POST['txt'];filewrite($name,$txt);?>

</body>
</html>

<?php
//自定义文件文件夹读取函数
function getfilename(){
    $dir=getcwd();
    $file=scandir($dir);
    foreach ($file as $value){
        if($value != '.' && $value != '..') {
            $arr[] = $value;
            echo $value.'<br>';
        }
    }
}

//自定义文件读取函数
function fileread($name){
    $f=fopen($name,"r");
    $code=fread($f,filesize($name));
    echo $code;
    fclose($f);

}
//自定义文件写入函数
function filewrite($name,$txt){
    $f=fopen($name,"a+");//打开文件为读/写,如果不存在会创建
    fwrite($f,$txt);
    fclose($f);

}


?>

 六、添加功能

①在index.php中修改

 ②新建file.php并写入代码

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>小迪博客</title>

    <style type="text/css">

        .nav li{

            background-color: yellow;

            padding: 8px 15px;

            float: left;

            list-style: none;

            color:#fff;

        }

    </style>

</head>

<body>

<ul class="nav">
    <li><a href="file-upload.php">文件上传</a></li>
    <li><a href="file-del.php">文件删除</a></li>
    <li><a href="file-down.php">文件下载</a></li>
    <li><a href="file-rw.php">文件内容操作</a></li>
</ul>

 总结

web漏洞的两个核心

1.可控变量

2.特定函数

什么函数决定什么漏洞,可控变量是决定有没有漏洞的原因。

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值