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

本文涉及的产品
访问控制,不限时长
简介: 安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全

文件管理模块-上传-过滤机制

$_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息。

$_FILES[“表单值”][“name”] 获取上传文件原始名称

$_FILES[“表单值”][“type”] 获取上传文件MIME类型

$_FILES[“表单值”][“size”] 获取上传文件字节单位大小

$_FILES[“表单值”][“tmp_name”] 获取上传的临时副本文件名

$_FILES[“表单值”][“error”] 获取上传时发生的错误代码

move_uploaded_file() 将上传的文件移动到指定位置的函数


1、无过滤机制

$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、黑名单过滤机制

//上传文件后缀过滤 黑名单机制
$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、白名单过滤机制

$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

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

<?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,无法利用进行目录遍历

06e4cd8c3f7f06e74a3c5c1f27de6f12_93a2ede57ddd4348867e58a0d18351ae.png


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(f i l e ) ) ; r e a d f i l e ( file));


文件编辑

1、file_get_contents() 读取文件内容

2、fopen() fread() 文件打开读入

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
2天前
|
安全 编译器 PHP
PHP 8:探索新特性及其对现代Web开发的影响
本文将深入探讨PHP 8版本中引入的新特性,以及这些更新如何影响现代Web开发的实践。我们将通过实际的代码示例和性能分析,展示PHP 8如何提升开发效率、加强安全性和增强应用性能,从而为开发者提供更优的编程体验。 【7月更文挑战第18天】
11 6
|
2天前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
13 3
|
1天前
|
设计模式 PHP 开发者
PHP中的面向对象编程:深入理解与应用
在PHP开发领域,面向对象编程(OOP)是提升代码复用性、可维护性和扩展性的关键。本文将深入探讨PHP中的OOP概念,包括类与对象的创建、继承、封装、多态和接口等核心原理。通过具体示例,我们将展示如何在PHP中有效运用OOP原则来构建健壮的应用程序。文章还将触及设计模式的应用,旨在为开发者提供一套实用的指导方针,以促进高质量PHP项目的实现。
|
1天前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的发布,这一广泛使用的服务器端脚本语言迎来了重大升级。本文将深入探讨PHP 8引入的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式等,以及这些特性如何提升性能、增强类型安全和改善开发者体验。同时,我们将分析这些变化对于现代Web开发实践的具体影响,以及它们如何塑造了PHP的未来发展方向。
8 1
|
6天前
|
测试技术 PHP 数据库
深入解析PHP框架:Symfony框架详解与应用
📚 Symfony框架深度解析:模块化设计提升开发效率,性能优越,灵活性高,支持MVC模式。探索控制器、路由、模板(如Twig)、服务容器、事件调度器等核心概念。还包括表单处理、数据库集成( Doctrine ORM)、安全组件、国际化支持及调试工具。使用Symfony CLI快速创建应用,内置PHPUnit测试支持。开始你的高质量Web开发之旅吧!
12 2
|
8天前
|
安全 编译器 数据处理
PHP 8:新特性解析与实践应用
本文深入探讨了PHP 8版本中引入的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式等,并结合实例代码演示了如何在实际项目中有效利用这些新功能来提高开发效率和代码质量。通过对比分析PHP 7与PHP 8的性能差异,文章进一步验证了新版本带来的性能提升,旨在为PHP开发者提供升级至PHP 8的全面指南。
8 2
|
8天前
|
安全 大数据 编译器
PHP 8: 探索新特性及其对现代Web开发的影响
在这篇文章中,我们将深入探讨PHP 8的最新特性,包括JIT编译器、联合类型、匹配表达式等,并分析这些更新如何影响现代Web开发。通过具体示例和代码片段,本文旨在为开发者提供一个清晰的指南,以便更好地利用PHP 8的新功能优化和加速他们的应用程序。
13 2
|
8天前
|
编译器 测试技术 PHP
深入理解PHP 7的新特性及其对现代Web开发的影响
【7月更文挑战第12天】本文将探讨PHP 7版本中引入的关键改进和新增功能,以及这些变化如何优化了性能、提升了代码的可维护性,并促进了现代Web开发的最佳实践。通过具体示例,我们将深入了解这些新特性在日常开发中的应用,以及它们为开发者带来的实际益处。
16 2
|
8天前
|
PHP 开发者
PHP 8 新特性及其对现代Web开发的影响
PHP 8作为最新版本,引入了一系列强大的新特性和改进,这些变化不仅仅是语言本身的提升,更深刻地影响了现代Web开发的方式和效率。本文将深入探讨PHP 8的关键特性,分析其在开发实践中的应用和优势,帮助开发者更好地理解和利用这些新特性。 【7月更文挑战第12天】
12 1
|
1天前
|
安全 编译器 测试技术
PHP 8新特性解析及其对现代Web开发的影响
本文将深入探讨PHP 8中引入的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些变化如何优化现代Web开发流程。通过实例演示和性能比较,揭示升级至PHP 8的益处与挑战,为开发者提供升级决策的参考依据。
5 0