用PHP编写的一个非常简单的文件浏览页面,可以很方便的查看和下载网站的所有文件。并提供有 API 接口给其它页面或程序。
刚开始只是为了更方便的从我的资源下载站中下载文件,就写了一个简单的文件浏览器;觉得纯白背景在晚上太瞎眼了,就添加了暗色模式;为了更方便的查看文件内容,就添加了文件查看器;后面认为需要一个 API 接口给其它页面,就做了一个简单的API接口;后面发现有目录遍历漏洞的问题,就添加了安全检查。
代码文件:下载
使用方法:
文本文件查看器使用方法:“files.php?view=<文件路径>”
示例:“files.php?view=.%2Ffile.txt”
API 使用方法:
API 目录列表:
- 通过
?api&dir=<目录路径>
请求 API,返回指定目录的文件和子目录信息,一个请求只能查看一个目录的文件列表。 - 如果请求的目录路径不存在或无效,会返回错误信息。
- 通过
API 检查/获取文件:
- 通过
?api&file=<文件路径>
请求 API,检查文件是否存在并返回相关信息,一次请求只能获取一个文件或目录的信息。 - 如果添加
encode=<编码格式>
参数会在 JSON 响应里包含文件的对应编码,目前只有 Base64 和 HEX,不能同时包含多个编码 ,用一个switch
语句来选择,可以很容易的扩展文件编码形式。
- 通过
API 响应格式:
- 所有API响应以JSON格式返回,包括成功和错误消息。
API 示例:
api&dir响应示例
:files.php?api&dir=./
{
"status": "success", // 响应成功(如果失败此值返回“error”)。
"items": [
{
"type": "file", // 目标类型是“文件”,如果是“dir”则是目录。
"name": "file.txt", // 文件或目录名称。
"path": "./file.txt", // 文件或目录路径。
"realPath": "/home/vol15_7/infinityfree.com/if0_35171181/htdocs/file.txt", // 文件或目录实际路径。
"size": 11, // 文件大小(字节数,如果是目录无此项)。
"mtime": "2024-08-04 13:50:50", // 文件的最后修改时间。
},
{...} // 其它的文件或目录以此类推。
]
}
api&dir错误响应:{
"status": "error",
"message": "Invalid directory" // 错误信息
}
api&item响应内容示例:files.php?api&item=./file.txt&encode=base64{
"status": "success", // 响应成功(如果失败此值返回“error”)
"message": "File exists", // 返回信息
"file": {
"name": "test.txt", // 文件名
"size": 1234, // 文件大小
"permissions": "0644", // 文件权限,使用八进制表示。
"mtime": "2024-08-04 13:50:50", // 文件的最后修改时间。
"ctime": "2024-08-04 13:50:50", // 文件的创建时间(在某些系统上,这可能表示inode变更时间)。
"ownerId": 123, // 文件所有者的用户名。
"ownerName": "N/A", // 文件所有者的用户名,如果 posix_getpwuid 不可用,则返回 'N/A'。
"groupId": 123, // 文件所属组的ID。
"groupName": "N/A" // 文件所属组的组名,如果 posix_getgrgid 函数不可用,则返回 'N/A'。
}
}
api&item错误响应:{
"status": "error",
"message": "File not found" // 错误信息
}
发表回复