前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全

安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全

作者头像
没事就要多学习
发布2024-07-18 15:45:24
1320
发布2024-07-18 15:45:24
举报
文章被收录于专栏:Cyber Security
文件管理模块-上传-过滤机制

_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息。 _FILES[“表单值”][“name”] 获取上传文件原始名称 _FILES[“表单值”][“type”] 获取上传文件MIME类型 _FILES[“表单值”][“size”] 获取上传文件字节单位大小 _FILES[“表单值”][“tmp_name”] 获取上传的临时副本文件名 _FILES[“表单值”][“error”] 获取上传时发生的错误代码 move_uploaded_file() 将上传的文件移动到指定位置的函数

1、无过滤机制

代码语言:javascript
复制
$name=$_FILES['f']['name'];
$type=$_FILES['f']['type'];
$size=$_FILES['f']['size'];
$tmp_name=$_FILES['f']['tmp_name'];
$error=$_FILES['f']['error'];

echo $name."<br>";
echo $type."<br>";
echo $size."<br>";
echo $tmp_name."<br>";
echo $error."<br>";
if(move_uploaded_file($tmp_name,'upload/'.$name)){
    echo "文件上传成功!";
}
在这里插入图片描述
在这里插入图片描述

2、黑名单过滤机制

代码语言:javascript
复制
//上传文件后缀过滤 黑名单机制
$black_ext=array('php','asp','jsp','aspx');
//xxx.jpg xxx.png
$fenge = explode('.',$name);
$exts = end($fenge);
if(in_array($exts,$black_ext)){
    echo '非法后缀文件'.$exts;
}else{
    move_uploaded_file($tmp_name,'upload/'.$name);
    echo '<script>alert("上传成功")</script>';
}
在这里插入图片描述
在这里插入图片描述

3、白名单过滤机制

代码语言:javascript
复制
$allow_ext=array('png','jpg','gif','jpeg');
//xxx.jpg xxx.png
$fenge = explode('.',$name);
$exts = end($fenge);
if(!in_array($exts,$allow_ext)){
    echo '非法后缀文件'.$exts;
}else{
    move_uploaded_file($tmp_name,'upload/'.$name);
    echo '<script>alert("上传成功")</script>';
}

4、文件类型过滤机制 Content-Type: application/octet-stream 改为 Content-Type: image/png

在这里插入图片描述
在这里插入图片描述

文件管理模块-显示-过滤机制

代码语言:javascript
复制
<?php
$dir = $_GET['path'] ?: './';
//1.打开目录,读取文件列表 opendir
//2.循环读取文件列表 while readdir
//3.判断是文件还是文件夹 is_dir

//打开目录,读取文件列表 opendir
function filelist($dir){
    if($dh = opendir($dir)){
        //循环读取文件列表 while readdir
        while(($file=readdir($dh) )!== false){
            //判断是文件还是文件夹 is_dir
            if(is_dir($file)){
                echo "<li><i class='fa fa-folder'></i> <a href='?path=$file'>" . $file . '</a></li>';
            }else{
                echo '<li><i class="fa fa-file"></i> <a href="#">' . $file . '</a></li>';
            }
        }
    }
}
filelist($dir);
function del($file){
    if(!is_dir($file)){
        unlink($file);
        echo "<script>alert('删除成功')</script>";
    }
}
if(isset($_GET['del'])){
    del($_GET['del']);
}
function down($filepath){
    $fileName = basename($filepath);
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"" . $fileName . "\"");
    header("Content-Length: " . filesize($filepath));
    readfile($filepath);
}
if(isset($_GET['down'])){
    down($_GET['down']);
}
?>

功能:显示 上传 下载 删除 编辑 包含等 1.打开目录读取文件列表

在这里插入图片描述
在这里插入图片描述

2.递归循环读取文件列表 3.判断是文件还是文件夹 4.PHP.INI目录访问控制

在这里插入图片描述
在这里插入图片描述

开启后将网站根目录设置为D:\phpStudy\PHPTutorial\WWW\blog,无法利用进行目录遍历

在这里插入图片描述
在这里插入图片描述

is_dir() 函数用于检查指定的路径是否是一个目录 opendir() 函数用于打开指定的目录,返回句柄,用来读取目录中的文件和子目录 readdir() 函数用于从打开的目录句柄中读取目录中的文件和子目录 open_basedir:PHP.INI中的设置用来控制脚本程序访问目录

PHP文件操作安全

-文件包含,文件上传,文件下载,文件删除,文件写入,文件遍历

文件包含

include() 在错误发生后脚本继续执行 require() 在错误发生后脚本停止执行 include_once() 如果已经包含,则不再执行 require_once() 如果已经包含,则不再执行

文件上传

架构: 1、上传至服务器本身的存储磁盘(源码在一起) 2、云产品OSS存储对象去存储文件(泄漏安全) 这个技巧挖src还是挺管用的 阿里云中oss云存储资源需要购买(好处就是无脚本执行环境 降低安全风险)

在这里插入图片描述
在这里插入图片描述

当然关于这方面的利用就是通过前端源码泄露的ak/sk,利用OSS浏览器、行云管家等工具进行bucket接管

在这里插入图片描述
在这里插入图片描述

附上刚出的漏洞

在这里插入图片描述
在这里插入图片描述

多说几句:一般web应用就是通过找一些静态资源泄露,小程序就是反编译找关键词,APP同样也是反编译(脱壳、adb、frida、xpose)……这是可以讲的麽

3、把文件上传到其他域名,如:www.xiaodi8.com->upload.xiaodi8.com

文件删除

unlink() 文件删除函数 调用命令删除:system shell_exec exec等

文件下载

修改HTTP头实现文件读取解析下载: header(“Content-Type: application/octet-stream”); header(“Content-Disposition: attachment; filename=”"); header("Content-Length: " . filesize(

file)); readfile(

file);

文件编辑

1、file_get_contents() 读取文件内容 2、fopen() fread() 文件打开读入

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件管理模块-上传-过滤机制
  • 文件管理模块-显示-过滤机制
  • PHP文件操作安全
  • 文件包含
  • 文件上传
  • 文件删除
  • 文件下载
  • 文件编辑
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档