小迪安全 Web安全 基础入门 – 第十三天 – PHP开发 – 个人博客项目&文件操作类&编辑器&上传下载删除读写

Posted SecurityHacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小迪安全 Web安全 基础入门 – 第十三天 – PHP开发 – 个人博客项目&文件操作类&编辑器&上传下载删除读写相关的知识,希望对你有一定的参考价值。

一、文件上传类:-任意文件上传

(一)分类

1、自主编写的代码中包含任意文件上传。

2、站点使用的编辑器代码中引用了任意文件上传。

(二)代码示例

<?php
//设置上传文件过滤
if((($_FILES["file"]["type"] == "image/gif")
||($_FILES["file"]["type"] == "image/jpeg")
||($_FILES["file"]["type"] == "image/jpg")
||($_FILES["file"]["type"] == "image/png")
||($_FILES["file"]["type"] == "image/pjpeg"))
||($_FILES["file"]["size"] < 20000))

    //如果存在错误
    if($_FILES["file"]["error"] >0)
        echo "Error: " . $_FILES["file"]["error"] . "<br />";
    else
        //文件名
        echo "Upload: ". $_FILES["file"]["name"] . "<br />";
        //文件类型
        echo "Type: " . $_FILES["file"]["type"] . "<br />";
        //文件大小
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . "Kb<br />";
        //存储在服务器的文件的临时副本名称
        echo "上传文件的临时副本名: " . $_FILES["file"]["tmp_name"] . "<br />";
    
    //如果文件已存在
    if(file_exists("upload/" . $_FILES["file"]["name"]))
        echo $_FILES["file"]["name"] . "已存在。";
    else//若文件不存在,把上传的文件保存到其他位置
        move_uploaded_file($_FILES["file"]["tmp_name"],
        "upload/" . $_FILES["file"]["name"]);
        echo "文件保存位置:" . "upload/" . $_FILES["file"]["name"] . "<br />";
    
else//若上传的文件不满足过滤条件
    echo "无效文件!";

?>

二、文件下载类:-任意文件下载

(一)分类

1、直连URL访问。下载文件以直连URL形式访问,链接写死。

2、传参头部修改。对下载文件的URL进行过滤,不直接访问。

(二)代码示例

<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>文件下载</title>
    </head>
    <body>
        <h1>直连下载</h1>
        <?php getfilename(); ?>
        <form id="upload-form" action="" method="POST" enctype="multipart/form-data">
            需要下载的文件:<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();
    //扫描upload目录
    $filename = scandir($filepath.\'/upload/\');
    //输出upload目录下的文
    //var_dump($filename);
    echo "<br>";
    //过滤数组,只输出值
    foreach($filename as $value)
        if($value != \'.\' && $value != \'..\')
            $arr[] = $value;
            echo $value . "<br>";
        
    

function geturldown($name)
    $url = \'http://\' . $_SERVER[\'HTTP_HOST\'] . \'/file/upload/\' . $name;
    header("Location:$url");
    echo $url . "<br>";
    exit;

?>

三、文件删除类-任意文件删除

(一)分类

1、文件删除。

2、文件夹删除。

(二)代码示例

<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>php文件删除</title>
    </head>
    <body>
        <h1>php文件删除</h1>
        <?php getfilename();?>
        <form id="upload-form" action="" method="post" enctype="multipart/form-data">
            需要删除的文件:<input type="text" name="name" />
            <input type="submit" value="删除" />
        </form>
        <?php $name=$_POST[\'name\'];delfilename($name);?>

        <h1>php文件夹删除</h1>
        <?php getfilename();?>
        <form id="upload-form" action="" method="post" enctype="multipart/form-data">
            需要删除的文件夹:<input type="text" name="name" />
            <input type="submit" value="删除" />
        </form>
        <?php $name=$_POST[\'name\'];deldirfilename($name);?>
    </body>
</html>
<?php
    //遍历目录
    function getfilename()
        $dir=getcwd();
        $file=scandir($dir . \'/upload/\');
        foreach($file as $value)
            if($value != \'.\' && $value != \'..\')
                $arr[] = $value;
                echo $value . \'<br>\';
            
        
    
    //删除文件
    function delfilename($name)
        $dir=getcwd();
        unlink($dir . \'\\upload\\\\\' . $name);
    
    //删除文件夹
    function deldirfilename($name)
        $dir=getcwd();
        $file=scandir($dir);
        rmdir($dir . \'\\upload\\\\\' . $name);
    
?>

  

四、文件内容操作类-任意文件读取&写入

(一)分类

1、文件读取。

2、文件写入

(二)代码示例

<?php 
echo "<h2>php文件读取</h2>";
//读取webdictionary.txt文件
$myfile = fopen("webdictionary.txt","r");
//输出webdictionary.txt文件内容
//echo fread($myfile,filesize("webdictionary.txt"));
//单行输出直到文件末尾
while(!feof($myfile))
    echo fgets($myfile) . "<br>";

//关闭文件
fclose($myfile);
echo "<br>";
?>

<?php 
echo "<h2>php文件写入</h2>";
//打开newfile文件,若文件不存在,则fopen()函数会创建这个文件
$myfile = fopen("newfile.txt","w");
//向newfile文件中写入数据
$txt =  "Bill Gates\\n";
fwrite($myfile,$txt);
$txt = "Steve Jobs\\n";
fwrite($myfile,$txt);
fclose($myfile);
$myfile = fopen("newfile.txt","r");
//逐行输出文件内容直至末尾
while(!feof($myfile))
    echo fgets($myfile) . "<br>";

//关闭文件
fclose($myfile);
?>

  

五、文件包含-任意文件包含

(一)分类

1、本地文件包含。

2、远程文件包含。

(二)代码示例

创建一个名为include_file.php的文件,写入如下内容:

<?php
include(\'1.txt\');
?>

在脚本当前目录下创建一个文件1.txt,在1.txt中写入如下内容:

<?php phpinfo(); ?>

执行include_file.php文件到浏览器中,浏览器会解析到phpinfo文件中去。

六、Web漏洞核心

(一)可控变量

1、漏洞利用的一个重要思路就是寻找可控变量

2、用户通过站点中存在的可控变量,进而控制被调用的文件,从而实现对站点入侵

(二)特定函数-函数的多样化

由于代码中使用的某些特定函数对用户输入数据处理不当,当用户利用这些特定函数注入恶意程序时,可导致关键系统被控制的漏洞可以劫持程序执行流程,转向执行攻击者指定的任意指令、代码等,从而实现对站点的入侵。

以上是关于小迪安全 Web安全 基础入门 – 第十三天 – PHP开发 – 个人博客项目&文件操作类&编辑器&上传下载删除读写的主要内容,如果未能解决你的问题,请参考以下文章

Java基础第十三天总结

《小迪网络安全笔记》 第十二节:WEB漏洞-SQL注入之简要SQL注入

小迪安全基础入门(P1-P5)

(2020上半年第1天(基础入门))小迪网络安全笔记

oldboy第十三天学习

学习第十三天(2019-11-26)