说说TP5.0.x命令是如何执行filter的!
发布时间 - 2022-01-27 00:00:00 点击率:次下面thinkphp框架教程栏目将给大家介绍Thinkphp5.0.x命令怎么执行filter,希望对需要的朋友有所帮助!
Thinkphp5.0.x命令执行
同样是利用call_user_func()进行命令执行,在Request类的函数filterValue中执行【推荐:thinkphp视频教程】
首先搜索哪些函数调用了filterValue:
在Request类中的cookie()和input()函数中调用了filterValue()
搜索cookie函数调用情况,未发现结果;搜索input调用情况:
从run函数跟进:
step1
在$request = is_null($request) ? Request::instance() : $request;
会执行request的构造函数,此时已经通过构造函数中file_get_contents(‘php://input’)获取到了POST的内容并赋值给$request->input变量
Step2
$dispatch = self::routeCheck($request, $config);
在routeCheck中会进入Route类的check函数:
check函数调用了$request->method():
传入参数默认值为false,会执行到elseif中获取var_method => _method,下面会对获取到的变量进行覆盖,此时如果传入__construct,$_POST获取到post提交的数据,即可在construct函数中遍历POST的数组对request类中的成员进行覆盖
以下利用过程需要:debug模式开启
在run()中会调用param():
跟进param函数:
/**
* 获取当前请求的参数
* @access public
* @param string|array $name 变量名
* @param mixed $default 默认值
* @param string|array $filter 过滤方法
* @return mixed
*/
首先进入if条件,跟进method方法
method()传入参数为true:
执行下面语句:获取原始请求类型$_SERVER['REQUEST_METHOD'],返回值为POST
返回到param中,$method=POST
因此会执行switch中的POST部分,进入post函数:
post函数:
/**
* 设置获取POST参数
* @access public
* @param string $name 变量名
* @param mixed $default 默认值
* @param string|array $filter 过滤方法
* @return mixed
*/
传入参数:
,然后复制给$content,然后对$_POST和是否json格式判断,如果是json传入还需要进行json_decode,否则直接使用$_POST的值
进入input方法:传入参数为POST所获取到的
Name为false,input返回data,post()直接返回
param()函数中:$vars = $this->post(false);
进入getFilter:
getFilter中$filter = $filter ?: $this->filter;获取到$request类的filter变量值(之前在construct遍历覆盖的),并作为返回值给input函数
继续执行array_walk_recursive($data, [$this, 'filterValue'], $filter);
array_walk_recursive() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数
相当于$filters=system取$data中的每一个变量作为$value传入,当取到ccc=ipconfig时,system作为call_user_func第一个参数,ipconfig作为第二个,造成了命令执行。
执行结果:
# 遍历
# 中会
# 值为
# 默认值
# 类中
# 变量名
# 第一个
# 可在
# 第二个
# 会对
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel如何记录自定义日志?(Log频道配置)
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
Android使用GridView实现日历的简单功能
香港服务器选型指南:免备案配置与高效建站方案解析
Thinkphp 中 distinct 的用法解析
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何快速搭建高效简练网站?
手机网站制作与建设方案,手机网站如何建设?
高端云建站费用究竟需要多少预算?
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
javascript基本数据类型及类型检测常用方法小结
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
iOS UIView常见属性方法小结
三星网站视频制作教程下载,三星w23网页如何全屏?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Linux系统运维自动化项目教程_Ansible批量管理实战
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
Laravel如何使用.env文件管理环境变量?(最佳实践)
如何在万网ECS上快速搭建专属网站?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel storage目录权限问题_Laravel文件写入权限设置
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
linux写shell需要注意的问题(必看)
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何有效防御Web建站篡改攻击?
如何彻底删除建站之星生成的Banner?
PythonWeb开发入门教程_Flask快速构建Web应用
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
原生JS获取元素集合的子元素宽度实例
智能起名网站制作软件有哪些,制作logo的软件?
如何用PHP工具快速搭建高效网站?
昵图网官方站入口 昵图网素材图库官网入口
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
利用 Google AI 进行 YouTube 视频 SEO 描述优化

