说说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 描述优化