阿里云开发者社区

电脑版
提示:原网页已由神马搜索转码, 内容由developer.aliyun.com提供.

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

2024-06-1922
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本文涉及的产品
访问控制,不限时长
简介:安全开发-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
//打开目录,读取文件列表 opendirfunction 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() 文件打开读入

相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
9天前
|
设计模式安全测试技术
深入理解PHP 7的新特性及其对现代开发的意义
【6月更文挑战第20天】在数字时代的浪潮中,PHP作为一门流行的服务端脚本语言,其最新主要版本PHP 7带来了显著的性能提升和语法改进。本文将探讨PHP 7的关键新特性,包括性能优化、类型声明、匿名类以及错误处理机制的变革,并分析这些变化如何影响现代Web开发实践,为开发者提供更高效、更安全的编码体验。
|
7天前
|
安全编译器PHP
探索PHP 8的新特性及其对现代Web开发的影响
【6月更文挑战第22天】随着PHP 8的发布,这一广泛使用的服务器端脚本语言迎来了重大升级。本文将深入探讨PHP 8引入的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式以及错误处理和异常改进等。这些新特性不仅提升了性能,还增强了类型系统和语言的表达能力,为现代Web开发带来了新的机遇和挑战。我们将分析这些变化如何影响编码实践,优化策略,并讨论开发者如何适应这些变革以构建更快、更安全、更易于维护的应用程序。
|
1天前
|
安全编译器API
探索PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的正式发布,这一版本带来了多项重大改进和新特性,旨在提升性能、增加语言的灵活性并简化开发流程。本文将详细探讨PHP 8中的关键更新,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些新特性如何影响现代Web开发的实践。通过引用最新的性能数据和开发者反馈,我们将深入理解PHP 8带来的变革,以及它对现有项目和未来趋势的潜在影响。
|
1天前
|
安全大数据PHP
深入理解PHP 7中的新特性及其对现代Web开发的影响
【6月更文挑战第28天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,揭示这些变化如何重塑Web开发领域。我们将一窥未来PHP的发展趋势,并分析开发者如何利用这些新特性来构建更快、更安全、更易于维护的应用程序。
|
3天前
|
程序员PHP数据库
深入理解PHP 7的新特性及其对现代Web开发的影响
【6月更文挑战第26天】随着互联网技术的飞速发展,PHP作为服务端脚本语言的佼佼者,其最新版本PHP 7带来了性能和功能上的显著提升。本文将深度剖析PHP 7中的新特性,并探讨这些变化如何优化现代Web开发实践,提升应用性能及开发效率。我们将从语言本身的变化到实际应用案例,全面解读PHP 7给开发者带来的福音。
511
|
4天前
|
自然语言处理安全PHP
PHP 之道笔记整理:最佳实践与安全指南
这篇文章讨论了PHP开发中的最佳实践,包括使用最新稳定版(PHP 8.3)以提升性能和安全,利用`DateTime`类及Carbon库处理日期时间,确保使用UTF-8编码并用`mb_*`函数处理字符串,以及通过密码哈希和数据过滤来加强Web应用安全。文章提醒开发者始终保持对新技术和安全实践的关注。
|
11天前
|
SQL监控安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
1天前
|
安全编译器测试技术
探索PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的发布,这一广泛使用的服务器端脚本语言迎来了重大更新。本文将深入探讨PHP 8引入的关键新特性,如JIT编译器、联合类型、命名参数等,并通过性能测试和案例研究,揭示这些更新如何优化代码效率、增强类型安全和提升开发体验。我们还将分析PHP 8对现有项目升级路径的挑战与机遇,以及它如何影响未来Web开发的走向。
|
1天前
|
设计模式缓存前端开发
现代PHP开发中的设计模式应用与性能优化
本篇文章深入探讨了PHP开发中设计模式的实际应用及其对性能的影响。通过分析具体案例和最新研究成果,文章揭示了合理运用设计模式不仅可以提升代码的可维护性和扩展性,还能在特定场景下优化性能。我们将一起探索如何通过科学方法将设计模式融入日常开发实践,同时保持代码的高效执行。
|
4天前
|
设计模式安全编译器
深入理解PHP 7中的新特性及其对开发的影响
【6月更文挑战第25天】在PHP 7的发布中,许多重要的性能改进和语法新增使得这个版本成为了一个值得升级的里程碑。本文将探讨这些新特性如何影响日常开发工作,以及开发者如何利用它们来提升代码质量和执行效率。

热门文章

最新文章