PHP应用&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
PHP文件操作安全
- 文件包含
- 文件上传
- 文件下载
- 文件删除
- 文件写入
- 文件遍历
1.文件包含
include() 在错误发生后脚本继续执行
require() 在错误发生后脚本停止执行
include_once() 在错误发生后脚本继续执行,如果已经包含,则不再执行
require_once() 在错误发生后脚本停止执行,如果已经包含,则不再执行
文件包含的意义:例如有upload.html和upload.php文件,只有访问upload.html时才会出现文件上传页面,但只要在upload.php文件开头写上include 'upload.html'
,访问upload.php时会执行一次upload.html,这时就可以正常显示上传页面了。提高开发效率
影响:文件包含漏洞 include($_GET['page'])
2.文件上传
- 1、无过滤机制
- 2、黑名单过滤机制
- 3、白名单过滤机制
- 4、文件类型过滤机制
架构:
- 1、上传至服务器本身的存储磁盘(源码在一起)
- 2、云产品OSS存储对象去存储文件(存在key泄漏安全) ,只存储,不解析
- 3、把文件上传到其他域名,如:
www.xiaodi8.com->upload.xiaodi8.com
相关php变量以及函数
$_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息。
$_FILES["表单值"]["name"] 获取上传文件原始名称
$_FILES["表单值"]["type"] 获取上传文件MIME类型
$_FILES["表单值"]["size"] 获取上传文件字节单位大小
$_FILES["表单值"]["tmp_name"] 获取上传的临时副本文件名
$_FILES["表单值"]["error"] 获取上传时发生的错误代码
move_uploaded_file() 将上传的文件移动到指定位置的函数
3.文件显示
- 1.打开目录读取文件列表
- 2.递归循环读取文件列表
- 3.判断是文件还是文件夹
- 4.PHP.INI目录访问控制
is_dir() 函数用于检查指定的路径是否是一个目录
opendir() 函数用于打开指定的目录,返回句柄,用来读取目录中的文件和子目录
readdir() 函数用于从打开的目录句柄中读取目录中的文件和子目录
open_basedir:PHP.INI中的设置用来控制脚本程序访问目录
ini_set('open_basedir',__DIR__); 设置配置文件中,只能访问本目录
4.文件删除
文件删除函数:unlink()
调用命令删除:system() ,shell_exec() ,exec()等
5.文件下载
修改HTTP头实现文件读取解析下载
header(“Content-Type: application/octet-stream”);
header(“Content-Disposition: attachment; filename=””);
header(“Content-Length: “ . filesize($file));
readfile($file);
6.文件编辑
1、file_get_contents() 读取文件内容
2、fopen() fread() 文件打开读入
存在的安全漏洞:跨过对操作文件的执行,进行对其他目录文件的执行,如果使用了系统命令那么可以使用管道符进行进一步的命令操作
dnslog带外查询:http://dnslog.cn/