文件上传+文件路径访问

PHP文件操作安全

PHP开发的目的:通过开发思考开发的安全问题。

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

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

1、无过滤机制
2、黑名单过滤机制
3、白名单过滤机制
4、文件类型过滤机制

架构:
1、上传至服务器本身的存储磁盘->有解析的可能
2、借助云产品OSS存储对象去存储文件->后门无法解析,但OSS有泄露风险(例如JS泄露oss的连接账密)。
3、把文件上传到其他域上。(可能存在单纯存放文件的域名,类型OSS的那种。如果分离时是存入OSS就没法执行后面程序了。)
传递到OSS的解决办法:找到key漏洞。
网站越复杂,漏洞越多。

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

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

功能:显示 上传 下载 删除 编辑 包含等
1.打开目录读取文件列表
2.递归循环读取文件列表
3.判断是文件还是文件夹
4.PHP.INI目录访问控制

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