您当前的位置:首页 > 互联网教程

fastadmin(个人见解)

发布时间:2025-05-21 22:05:22    发布人:远客网络

fastadmin(个人见解)

一、fastadmin(个人见解)

在探索编程世界时,通读开发文档是理解新语言或框架最快的方法。今天,我将分享使用fastadmin框架的个人体验。这个框架以其一键生成CRUD功能著称,特别适合编程初学者,能迅速搭建起后台管理平台。

fastadmin框架基于ThinkPHP5.0,语法也遵循ThinkPHP规范,文档是学习的基石,可以随意在百度、CSDN、菜鸟等网站上查找。官方文档是最佳资源,可以提供最准确的信息。

使用fastadmin框架时,建议首先搭建本地环境,选择阿里云或腾讯云等服务,配置较低即可,每月花费仅需十几至二十元。命令行安装方式推荐,因为能确保与FastAdmin保持同步更新。确保安装Git、Node.js、Composer和Bower环境。

PHP版本应不低于7.0,推荐使用PHP7.1;Mysql版本需在5.5.0以上,支持innodb引擎;Apache或Nginx作为服务器;PDO、MBstring、CURL PHP扩展;Node.js可选,用于安装Bower和LESS;Composer可选,用于管理第三方扩展包;Bower可选,用于管理前端资源。

fastadmin框架提供了一系列特性,如一站式生成控制器、模型、视图、js等文件,方便快捷地构建后台管理系统。对于编程初学者来说,对照官方文档,搭建最简单的管理平台并非难事。

然而,fastadmin框架也有一些需要改进的地方。对于进阶用户,使用更多高级功能可能不够直观,需要更多实践和深入学习文档。对于框架的文档,虽然官方文档是最准确的,但还需在其他社区寻求支持,如遇到问题时,可以在论坛提问或查找相关教程。

总之,fastadmin框架为开发者提供了快速构建后台管理系统的强大工具。通过本地环境配置和命令行安装,可以确保系统始终处于最新状态。尽管在学习过程中可能会遇到挑战,但通过实践和持续学习,可以克服这些问题,提升编程技能。

二、fastadmin 基本使用配置

在使用FastAdmin版本1.3.5与ThinkPHP版本5.0.25时,以下配置是关键步骤:

驱动方式选择为Redis,配置包括:

主机地址:Env::get('redis.hostname')

密码:Env::get('redis.password')

端口:Env::get('redis.hostport')

设置缓存保存目录为CACHE_PATH,前缀为'cache_',缓存有效期根据Env::get('redis.expire')设置。

驱动方式同样选择Redis,配置包括:

SESSION_ID提交变量设置为'fastadmin'

主机地址:Env::get('redis.hostname')

密码:Env::get('redis.password')

端口:Env::get('redis.hostport')

配置有效期同样基于Env::get('redis.expire')。

驱动方式选择'Redis',配置包括:

前缀:'9M1d3jy2gGbtfXSQAZ4oIslC0Yz56cFK'

Redis主机地址、密码、端口、选择数据库需与缓存和会话设置相同。

定义行为以实现代码的简洁性,而非异步操作。使用Hook::listen("user_register_successed",$registerdata)注册成功事件,确保修改了public/assets/js/下的公共文件后执行更新压缩文件命令:php think min-m all-r all。

注意,此步骤在debug=false时可能不会执行修改的代码。

ws端点配置:ws://192.168.1.202/ws

wss端点配置:转发客户端的Host和IP信息到对应节点,设置client_max_body_size为100M,转发Cookie并设置SameSite,执行代理访问真实服务器。

每个进程启动时调用,执行多个cron任务,例如echo测试信息并延迟5秒。

配置site.php到Redis时,需要手动编写代码来实现。

三、FastAdmin前台文件上传漏洞讲解

漏洞点定位在FastAdmin的application\ api\ controller\ Common.php,触发漏洞的网址为/index/ajax/upload。要求是在application\ extra\ upload.php中设置chunking为true,即启用分片上传。

在分析脆弱点时,需确保post请求参数齐全,包括chunkid、action、chunkindex、chunkcount、filename。调用chunk函数chunk($chunkid,$chunkindex,$chunkcount)后,程序进入分片文件上传流程。

1.声明变量$destDir为RUNTIME_PATH/ chunks,其中RUNTIME等于ROOT_PATH,表示运行路径。

2.根据输入的参数,动态生成文件名$fileName为$chunkid-$chunkindex.part。

3.将$destDir与$fileName连接,形成最终的文件路径。

4.判断RUNTIME_PATH/ chunks路径是否存在,若不存在则创建文件夹。

5.将临时文件移动至RUNTIME_PATH/ chunks路径。

之后,触发合并函数,要求action参数为“合并”。此步骤中,$chunkDir变量取自RUNTIME_PATH“块”。

1.首先,计算文件路径为RUNTIME_PATH'chunks'+$chunkid。

2.根据$chunkcount进行循环,判断$filePath-$i-.part文件是否存在。

3.如果文件存在,在/ runtime/ chunks路径下创建以$filePath作为文件名的新文件。

5.通过$chunkcount参数控制循环读取与写入操作,文件路径动态构建为$filePath。

6.循环读取并写入文件内容,直至完成所有分片的合并。

在执行合并操作时,需关注参数控制,确保文件路径的动态生成过程不会导致路径穿越或文件系统破坏等风险。

更多深入分析与实验案例可参考以下链接:

exp地址:

关于shell地址为什么是根目录的解释,可查阅相关文档或实验结果进行分析。

相关讨论与技术分析可参考知乎专栏、阿里云文档、微信公众号文章等资源。